㈠ Python中list,tuple,dict,set的區別和用法
Python語言簡潔明了,可以用較少的代碼實現同樣的功能。這其中Python的四個內置數據類型功不可沒,他們即是list, tuple, dict, set。這里對他們進行一個簡明的總結。
List
字面意思就是一個集合,在Python中List中的元素用中括弧[]來表示,可以這樣定義一個List:
L = [12, 'China', 19.998]
可以看到並不要求元素的類型都是一樣的。當然也可以定義一個空的List:
L = []
Python中的List是有序的,所以要訪問List的話顯然要通過序號來訪問,就像是數組的下標一樣,一樣是下標從0開始:
>>> print L[0]
12
千萬不要越界,否則會報錯
>>> print L[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
IndexError: list index out of range
List也可以倒序訪問,通過「倒數第x個」這樣的下標來表示序號,比如-1這個下標就表示倒數第一個元素:
>>> L = [12, 'China', 19.998]
>>> print L[-1]
19.998
-4的話顯然就越界了
>>> print L[-4]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <mole>
print L[-4]
IndexError: list index out of range
>>>
List通過內置的append()方法來添加到尾部,通過insert()方法添加到指定位置(下標從0開始):
>>> L = [12, 'China', 19.998]
>>> L.append('Jack')
>>> print L
[12, 'China', 19.998, 'Jack']
>>> L.insert(1, 3.14)
>>> print L
[12, 3.14, 'China', 19.998, 'Jack']
>>>
通過pop()刪除最後尾部元素,也可以指定一參數刪除指定位置:
>>> L.pop()
'Jack'
>>> print L
[12, 3.14, 'China', 19.998]
>>> L.pop(0)
12
>>> print L
[3.14, 'China', 19.998]
也可以通過下標進行復制替換
>>> L[1] = 'America'
>>> print L
[3.14, 'America', 19.998]
Tuple
Tuple可以看做是一種「不變」的List,訪問也是通過下標,用小括弧()表示:
>>> t = (3.14, 'China', 'Jason')
>>> print t
(3.14, 'China', 'Jason')
但是不能重新賦值替換:
>>> t[1] = 'America'
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <mole>
t[1] = 'America'
TypeError: 'tuple' object does not support item assignment
也沒有pop和insert、append方法。
可以創建空元素的tuple:
t = ()
或者單元素tuple (比如加一個逗號防止和聲明一個整形歧義):
t = (3.14,)
那麼tuple這個類型到底有什麼用處呢?要知道如果你希望一個函數返回多個返回值,其實只要返回一個tuple就可以了,因為tuple裡面的含有多個值,而且是不可變的(就像是java裡面的final)。當然,tuple也是可變的,比如:
>>> t = (3.14, 'China', 'Jason', ['A', 'B'])
>>> print t
(3.14, 'China', 'Jason', ['A', 'B'])
>>> L = t[3]
>>> L[0] = 122
>>> L[1] = 233
>>> print t
(3.14, 'China', 'Jason', [122, 233])
這是因為Tuple所謂的不可變指的是指向的位置不可變,因為本例子中第四個元素並不是基本類型,而是一個List類型,所以t指向的該List的位置是不變的,但是List本身的內容是可以變化的,因為List本身在內存中的分配並不是連續的。
Dict
Dict是Python中非常重要的數據類型,就像它的字面意思一樣,它是個活字典,其實就是Key-Value鍵值對,類似於HashMap,可以用花括弧{}通過類似於定義一個c語言的結構體那樣去定義它:
>>> d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59,
'Paul': 75
}
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}
可以看到列印出來的結果都是Key:Value的格式,可以通過len函數計算它的長度(List,tuple也可以):
>>> len(d)
4
可以直接通過鍵值對方式添加dict中的元素:
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Bart': 59}
>>> d['Jone'] = 99
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}
List和Tuple用下標來訪問內容,而Dict用Key來訪問: (字元串、整型、浮點型和元組tuple都可以作為dict的key)
>>> print d['Adam']
95
如果Key不存在,會報錯:
>>> print d['Jack']
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <mole>
print d['Jack']
KeyError: 'Jack'
所以訪問之前最好先查詢下key是否存在:
>>> if 'Adam' in d : print 'exist key'
exist key
或者直接用保險的get方法:
>>> print d.get('Adam')
95
>>> print d.get('Jason')
None
至於遍歷一個dict,實際上是在遍歷它的所有的Key的集合,然後用這個Key來獲得對應的Value:
>>> for key in d : print key, ':', d.get(key)
Lisa : 85
Paul : 75
Adam : 95
Bart : 59
Dict具有一些特點:
查找速度快。無論是10個還是10萬個,速度都是一樣的,但是代價是耗費的內存大。List相反,佔用內存小,但是查找速度慢。這就好比是數組和鏈表的區別,數組並不知道要開辟多少空間,所以往往開始就會開辟一個大空間,但是直接通過下標查找速度快;而鏈表佔用的空間小,但是查找的時候必須順序的遍歷導致速度很慢
沒有順序。Dict是無順序的,而List是有序的集合,所以不能用Dict來存儲有序集合
Key不可變,Value可變。一旦一個鍵值對加入dict後,它對應的key就不能再變了,但是Value是可以變化的。所以List不可以當做Dict的Key,但是可以作為Value:
>>> print d
{'Lisa': 85, 'Paul': 75, 'Adam': 95, 'Jone': 99, 'Bart': 59}
>>> d['NewList'] = [12, 23, 'Jack']
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}
Key不可重復。(下面例子中添加了一個'Jone':0,但是實際上原來已經有'Jone'這個Key了,所以僅僅是改了原來的value)
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 99, 'Lisa': 85, 'Paul': 75}
>>> d['Jone'] = 0
>>> print d
{'Bart': 59, 'NewList': [12, 23, 'Jack'], 'Adam': 95, 'Jone': 0, 'Lisa': 85, 'Paul': 75}
Dict的合並,如何將兩個Dict合並為一個,可以用dict函數:
>>> d1 = {'mike':12, 'jack':19}
>>> d2 = {'jone':22, 'ivy':17}
>>> dMerge = dict(d1.items() + d2.items())
>>> print dMerge
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}
或者
>>> dMerge2 = dict(d1, **d2)
>>> print dMerge2
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}
方法2比方法1速度快很多,方法2等同於:
>>> dMerge3 = dict(d1)
>>> dMerge3.update(d2)
>>> print dMerge
{'mike': 12, 'jack': 19, 'jone': 22, 'ivy': 17}
set
set就像是把Dict中的key抽出來了一樣,類似於一個List,但是內容又不能重復,通過調用set()方法創建:
>>> s = set(['A', 'B', 'C'])
就像dict是無序的一樣,set也是無序的,也不能包含重復的元素。
對於訪問一個set的意義就僅僅在於查看某個元素是否在這個集合裡面:
>>> print 'A' in s
True
>>> print 'D' in s
False
大小寫是敏感的。
也通過for來遍歷:
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
#tuple
for x in s:
print x[0],':',x[1]
>>>
Lisa : 85
Adam : 95
Bart : 59
通過add和remove來添加、刪除元素(保持不重復),添加元素時,用set的add()方法:
>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])
如果添加的元素已經存在於set中,add()不會報錯,但是不會加進去了:
>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])
刪除set中的元素時,用set的remove()方法:
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])
如果刪除的元素不存在set中,remove()會報錯:
>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
KeyError: 4
所以如果我們要判斷一個元素是否在一些不同的條件內符合,用set是最好的選擇,下面例子:
months = set(['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec',])
x1 = 'Feb'
x2 = 'Sun'
if x1 in months:
print 'x1: ok'
else:
print 'x1: error'
if x2 in months:
print 'x2: ok'
else:
print 'x2: error'
>>>
x1: ok
x2: error
㈡ python和c語言區別
c語言和python的區別
1、語言類型不同。
Python是一種動態類型語言,又是強類型語言。它們確定一個變數的類型是在您第一次給它賦值的時候。C 是靜態類型語言,一種在編譯期間就確定數據類型的語言。大多數靜態類型語言是通過要求在使用任一變數之前聲明其數據類型來保證這一點的。
2、對象機制不同。
Python中所有的數據,都是由對象或者對象之間的關系表示的,函數是對象,字元串是對象,每個東西都是對象的概念。每一個對象都有三種屬性: 實體,類型和值。
C中沒有對象這個概念,只有「數據的表示」,比如說,如果有兩個int變數a和b,想比較大小,可以用a == b來判斷,但是如果是兩個字元串變數a和b,就不得不用strcmp來比較了,因為此時,a和b本質上是指向字元串的指針,如果直接用==比較, 那比較的實際是指針中存儲的值地址。
3、變數類型不同。
python六個標準的數據類型:Number數字、String字元串、List列表、Tuple元祖、Sets集合、Dictionary字典,數字類型有四種類型:整數、布爾型、浮點數和復數。C語言也可分四類:基本類型、枚舉類型、void的類型、派生類型。基本類型:整數類型、浮點類型。
4、函數庫的使用方法不同。
在C語言中使用那個庫函數,需要引入頭文件用include引入,而在python中需要引入別的模塊或者函數時需要用import引入。
兩者的不同機制是C語言中include是告訴預處理器,這個include指定的文件的內容,要當作本地源文件出現過,而python中的import可以通過簡單的import 導入,或者是 import numpy as np 。
5、全局變數不同。
在C語言中,聲明全局變數,如果值是恆定的,那麼可以直接用#define聲明,如果只是聲明全局,並且變數的值是可變的,那麼直接類似int a 就可以了。
在python中,聲明全局變數時,需要加上global,類似global a,在函數裡面使用的時候需要先聲明global a ,否則直接用a那麼python會重新創建一個新的本地對象並將新的值賦值給他,原來的全局變數的值並不變化。
㈢ Python中內置數據類型list,tuple,dict,set的區別和用法
python 中list,tuple,dict,set是最常用的集合類型。
list列表,相當於一個數組,不過list的長度是自動變化的而且列表元素自由的,不必每個元素都是同一種類型。它的簡潔的定義方式是a=[]。有序組合
tuple也是一個組合。不過tuple在定義好之後就不能再變化。它的簡潔的定義方式是a=1,3也可以是a=(1,3).有序組合。
dict是字典類型。也就是鍵值對類型。鍵名不可以重復,並且不可以變化(字元串就符合這個要求,常用字元串作為鍵名)。它的簡潔的定義方式是a={}.無序組合(意思就是你無法按照添加的順序對他進行遍歷)。
set是set類型(不好翻譯,用的也少)。也是一個無序的組合,元素是互斥的,也就不會出現相同的元素。可以把一個序列轉換成無重復元素的set.無序組合。
以下是使用的示例代碼。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a_tuple=(1,3423,'34')
a_list=[12,12.34,'sds']
a_dict={'key1':1,'key2':2}
a_set=set('2323')
for t in a_tuple:
print('%s in tuple'%t)
print('*'*10)
for l in a_list:
print('%s in list'%l)
print('*'*10)
for k,v in a_dict.items():
print('key=%s,value=%s in dict'%(k,v))
print('*'*10)
for s in a_set:
print('%s in set'%s)
print('*'*10)
㈣ Python元組與c語言的數組有什麼區別嗎
區別大了,首先tuple不能修改,然後python裡面都是對象,有很多自帶方法和屬性,用起來可比c的數組靈活多了。
㈤ python tuple怎麼創建
tuple,在python里是元組的意思。
創建元組的兩個方法:
使用特徵符號創建:
㈥ java中的tuple是什麼意思
㈦ python和c語言的區別是什麼
Python可以說是目前最火的語言之一了,人工智慧的興起讓Python一夜之間變得家喻戶曉,Python號稱目前最最簡單易學的語言,現在有不少高校開始將Python作為大一新生的入門語言。本萌新也剛開始接觸Python,發現Python與其他語言確實有很大的區別。Python是由C語言實現的,因此想把Python與C語言做一個簡單的比較。
1、語言類型
Python是一種基於解釋器的語言,解釋器會逐行讀取代碼;首先將Python編譯為位元組碼,然後由大型C程序解釋。
C是一種編譯語言,完整的源代碼將直接編譯為機器代碼,由CPU直接執行。
2、內存管理
Python使用自動垃圾收集器進行內存管理。
在C語言中,程序員必須自己進行內存管理。
3、應用
Python是一種通用編程語言,一個多範式。它主要支持面向對象編程,程序編程,函數編程。
C是結構化編程語言。允許使用函數,選擇(if / else等),迭代(循環)。它主要用於硬體相關的應用程序。
4、速度
Python編程語言因為歷史原因,有一個GIL鎖,導致其對多線程支持不夠好,運行速度較慢;而C語言很快,C語言是比較底層的語言,運行效率上要優於Python。
5、復雜度不一樣
在Python中,不需要聲明變數類型。而在C中,必須聲明變數類型。
Python程序更易於學習,編寫和閱讀。而C程序語法比Python更難。
Python中的測試和調試更容易;而在C中測試和調試更難。
相關推薦:《Python教程》
知識點擴展
大的區別。Python是由C語言實現的,因此想把Python與C語言做一個簡單的比較。
一、C語言是編譯型語言,經過編譯後,生成機器碼,然後再運行,執行速度快,不能跨平台,一般用於操作系統,驅動等底層開發。
Python是編譯型還是解釋型這個界限並不明顯,但大致上可以理解為解釋型語言,執行速度慢,由於Python虛擬機,Python是可以跨平台的,Python高度集成適合於軟體的快速開發。
二、
C語言中需要事先定義變數類型,以int類型為例,當定義一個int型變數後,就會在內存中開辟4個位元組,再來進行初始化,由於長度是指定的,在運算過程中需要考慮,溢出,精度等問題。
Python中的數據類型:
1.Number:數字
·Int
·Float
·Bool
·Complex
2.String:字元串
3.List:列表
4.Tupel:元組
5.Sets:集合
6.Dictionary:字典
Python不需要事先定義變數類型,以a=3為例,在內存中存放一個整數3,然後再用變數a指向3,變數a是沒有類型的,我們所說的類型是指變數所指的內存中對象的類型。
從數據類型上就可以看出Python的友好性,基本數據類型變少了,沒有煩人的指針,不需要考慮數據溢出和精度的問題,當在程序中需要使用某個變數時,就能夠直接使用,而不需要在程序開頭定義變數。除此之外,Python還提供了str,list,dict這些強大的數據類型,讓程序開發變的更為簡單。
三、Python還提供了一個交互界面,輸入python進入交互界面,輸入exit()退出交互界面,類似於Linux終端,輸入一行命令,執行一行,為學習Python提供了很大的便利。
四、在運算符和優先順序上面,兩者並沒有大的區別,但在python中沒有自加和自減運算符,在邏輯運算符上Python也區別於C語言,Python中是and,or,not ,而C語言中則是&&,||,!
五、Python中通過縮進來表示語句體,C語言通過{}來表示語句體,並且在Python中每一條語句結尾後沒有分號,判斷語句if else,這兩者沒有區別,循環語句while也沒有,只是for循環,Python通過for in來表示。
六、Python有很多內置函數(build in function),不需要寫頭文件,Python還有很多強大的模塊,需要時導入便可。C語言在這一點上遠不及Python,大多時候都需要自己手動實現。
七、C語言中的函數,有著嚴格的順序限制,如果要調用函數,該函數需要在本次調用之前就需要被實現,或者在程序開頭事先聲明,而Python中則沒有這個限制,Python中還有高階函數這一概念,即函數名也可當作函數參數,函數名也是一種變數,指向內存中的某個函數,這種寫法可以大大減少代碼長度。
python中還提供了可變參數和關鍵字參數,這樣使得函數的功能大大提高,原來需要寫多個函數,現在只需要一個函數就可以實現這些功能。
八、C語言是面向過程的語言,很多時候都需要自己手動實現函數來完成某一功能。Python中引入了類和對象,是面向對象編程的語言,面向對象使得代碼的可重用性大大提高,數據的封裝性也更好。面向對象與面向過程的具體比較就不多說了,但有兩句非常重要的話:類是抽象的,而對象是具體的。
九、python中既有函數也有方法,常常讓人疑惑,我個人覺得也沒有必要區分的非常清楚,但是兩者還是有較大的區別:函數是自由的,而方法是受限的。在編程的時候需要分清楚調用的是方法還是函數。
總結:Python可以說是非常「簡單」的語言,高度集成,代碼量少,簡單是相對其他語言而言。但編程從來都不是一個簡單活,需要我們不斷學習,掌握底層實現原理,才是正道。
㈧ c#中,A.tuplestring("10.3f")是啥意思還有哪些其他參數
tuplestring應該不是.net庫的方法,而是某個第三方實現,如果你要知道它還有哪些參數的話,可以在Visual Studio中在tuplestring上按F12,查看它的簽名,以及是否有多個重載。
"10.3f"是以前C語言格式字元串的一種,表示輸出符點型結果,共10位,其中小數點後輸出3位。
㈨ tuple是什麼意思,電子相關
tuple
元組,數組
In a relational data base, a part of a relation that identifiers an entity and its attributes.
關系資料庫中,標識一個實體及其屬性的關系的一部分。 參閱relation。