python數據類型總結

python 具備很是豐富的數據類型,
包括字符串,列表,元組,字典集合等,每種數據類型的特色都大同樣,好好利用他們
可讓你的python編程變的很是輕鬆,要好好利用就應該充分了解他們的特色,下面對他們的特色進行一些總結。

python字符串:
字符串在python中是一個單個字符的字符串的序列,能夠對字符串進行切片鏈接等相關操做。
下面是關於python字符串的一些文章:
python 字符串替換  
python字符串鏈接  

python列表
列表是一個任意數據類型組成的有序集合,有點像其它語言的數組,若是用過其它語言的朋友相信對它不會陌生,列表的操做很是
豐富,能夠用dir來查看他自帶的方法。
下面是關於python列表的一些文章:
python列表  
python列表操做方法  

python元組
python元組和列表同樣都是有序序列,所不一樣的是元組是不可變的類型,常常用在系統配置文件裏,做爲系統的配置信息,比較安全和穩定,不容易輕易被改變。
下面是python元組的一些文章:
python 元組

python字典
字典是python對象中惟一的映射的類型,和數學的映射的關係差很少,其它的語言也有大概的數據類型,自帶的方法也不少
下面是python字典的一些文章:
python 字典
python 字典 添加

python集合
python集合在其它的語言好像比較少見,作一些中間處理仍是很是好的
下面是python集合的一些文章:
python 集合

下面是一些朋友總結的。

共同點:
一、它們都是py的核心類型,是py語言自身的一部分。

核心類型與非核心類型
多數核心類型可經過特定語法來生成其對象,好比"spam"就是建立字符串類型的對象的表達式;
非核心類型須要內置函數來建立,好比文件類型須要調用內置函數open()來建立。
類也能夠理解成自定義的非核心類型。

二、邊界檢查都不容許越界索引

三、索引方法都使用[]
s = 'spam'
print s[0]
s = ['s', 'p', 'a', 'm']
print s[0]
s = {'name':'bob', 'age':'12'}
print s['name']
s = ('s', 'p', 'a', 'm')
print s[0]

4大部分都支持迭代的協議

不一樣點:
一、有序性
字符串、列表、元組是序列,元組能夠理解成不可變的列表
字典是映射
序列纔有有序性,字典沒有可靠的左右順序

二、可變性
字符串、元組(還有數字)具備不可變性,即賦值後對應存儲空間的內容不可變,除非這個對象被銷燬。
列表、字典具備可變性

s = 'spam'
s = 'z' + s[1:]

第一行的s的指向的內存空間(好比地址0x000123)存儲了字符串'spam'
第二行的s「變」成了'zpam',但它只是從新指向了一個存儲着'zpam'字符串的內存地址,原來0x000123出開始的內存空間可能仍是一個'spam',直到系統來清理它。

三、序列操做
序列(字符串、列表、元祖)支持,映射(字典)不支持
注意:序列操做生成的類型不變。

col = 'spam'
print col[1:]
#結果是pam

col = ['s', 'p', 'a', 'm']
print col[1:]
#結果是['p', 'a', 'm']

col = ('s', 'p', 'a', 'm')
print col[1:]
#結果是('p', 'a', 'm')


四、列表解析表達式
表達式中支持序列(字符串、列表、元祖),貌似也支持映射(字典)。
注意:和序列操做不一樣的是,
列表解析表達式生成的只能是一個列表;
double = [c * 2 for c in 'spam']
print double
結果爲['ss', 'pp', 'aa', 'mm']

L1 = [1, 2, 3]
L2 = [4, 5, 6]
L3 = [(a + b) for (a,b) in zip(L1, L2)]
print L3
#結果爲[5, 7, 9]

tup = (1, 2, 3)
double = [c * 2 for c in tup]
print double
#結果爲[2, 4, 6]

a = {'a':'zw','b':'ww'}
b = [i * 2 for i in a.items()]
print b
#結果爲[('a','zw','a','zw'),('b','ww','b','ww')]


下面一段代碼彷佛是列表解析表達式對字典的支持,對字典進行的迭代應該是對其keys的迭代,字典的items()、 keys()、values()方法都是返回的列表,因此,這裏的for i in a最好寫成for i in a.keys(),效果等同。總之,能夠不追究列表解析表達式到底支不支持字典,本質上,列表解析表達式就是個對列表使用了循環結構,並生成新的列表的方法。先這樣理解

a = {'a':'zw','b':'ww'}
b = [i * 2 for i in a]
print b
#結果爲['aa', 'bb'] 

複製代碼
五、嵌套
除了字符串,列表、元組、字典能夠相互多層次嵌套

#第一段
b = [1, 2, 3]
tup = (4, 5, b)
print tup[2]
#結果是[1, 2, 3]
b[0] = 'x'
print tup[2]
#結果是['x', 2, 3]


#第二段
b = '123'
tup = (4, 5, b)
print tup[2]
#結果是'123'
b = 'xxx'
print tup[2]
#結果仍然是'123'


有上面兩段能夠看出,嵌套與可變性是不衝突的。
tup = (4, 5, b)中所記憶、錄入的b是個變量指針,或者叫內存地址,是個數字。
第一段,b指向一個列表,列表具備可變性,因此b[0] = 'x'的操做後,因此對元祖的索引能體現出變化;
第二段,b指向一個字符串,字符串具備不可變性,因此b = 'xxx'的操做後,b這個指針自己就改變了,重指向另外一段內存空間,而tup元組中記憶的內存地址(那個曾經的b)所指空間並無變,仍是字符串'123'。
因此,不論是第一段仍是第二段,元組tup始終保持不可變性,要變化也是其元素做爲指針所指向內存的變化。

總結:python數據類型最重要的就是理解好可變性和不可變性,相信理解好了能夠減小不少錯誤和少走一些彎路!
相關文章
相關標籤/搜索