python資料型別區別

2021-06-20 07:07:34 字數 3211 閱讀 5771

之前在沒有弄清楚python資料型別的情況下,對於列表和字典的程式設計不是那麼的順溜,深感沒有做好基本功就扛起衝鋒槍的悲痛。

python很重要的的那幾個資料型別:字串,列表,字典,元組,他們之間重要的區別的是什麼?能否舉幾個例子來說明下!

共同點:

1、它們都是py的核心型別,是py語言自身的一部分。

核心型別與非核心型別

多數核心型別可通過特定語法來生成其物件,比如"spam"就是建立字串型別的物件的表示式;

非核心型別需要內建函式來建立,比如檔案型別需要呼叫內建函式open()來建立。

類也可以理解成自定義的非核心型別。

2、邊界檢查都不允許越界索引

3、索引方法都使用

1. s = 'spam'

2. print s[0]

3.4. s = ['s', 'p', 'a', 'm']

5. print s[0]

6.7. s =

8. print s['name']

9.10. s = ('s', 'p', 'a', 'm')

11. print s[0]

複製**

不同點:

1、有序性

字串、列表、元祖是序列,元祖可以理解成不可變的列表

字典是對映

序列才有有序性,字典沒有可靠的左右順序

2、可變性

字串、元祖(還有數字)具有不可變性,即賦值後對應儲存空間的內容不可變,除非這個物件被銷毀。

列表、字典具有可變性

1. s = 'spam'

2. s = 'z' + s[1:]

複製**

第一行的s的指向的記憶體空間(比如位址 0x000123)儲存了字串'spam'

第二行的s「變」成了'zpam',但它只是重新指向了乙個儲存著'zpam'字串的記憶體位址,原來0x000123出開始的記憶體空間可能還是乙個 'spam'

,直到系統來清理它

3、序列操作

序列(字串、列表、元祖)支援,對映(字典)不支援

注意:序列操作生成的型別不變。

1. col = 'spam'

2. print col[1:]

3. #結果是pam

4.5. col = ['s', 'p', 'a', 'm']

6. print col[1:]

7. #結果是['p', 'a', 'm']

8.9. col = ('s', 'p', 'a', 'm')

10. print col[1:]

11. #結果是('p', 'a', 'm')

複製**

4、列表解析表示式

表示式中支援序列(字串、列表、元祖),貌似也支援對映(字典)。

注意:和序列操作不同的是,

列表解析表示式生成的只能是乙個列表;

1. double = [c * 2 for c in 'spam']

2. print double

3. 結果為['ss', 'pp', 'aa', 'mm']

4.5. l1 = [1, 2, 3]

6. l2 = [4, 5, 6]

7. l3 = [(a + b) for (a,b) in zip(l1, l2)]

8. print l3

9. #結果為[5, 7, 9]

10.11. tup = (1, 2, 3)

12. double = [c * 2 for c in tup]

13. print double

14. #結果為[2, 4, 6]

複製**

可以把字典轉化成列表,謝謝lx的提醒,呵呵

1. a =

2. b = [i * 2 for i in a.items()]

3. print b

4. #結果為[('a','zw','a','zw'),('b','ww','b','ww')]

5. #a.items()實際上是乙個列表

複製**

下面一段**似乎是列表解析表示式對字典的支援,經過un兄和nell兄的理解,對字典進行的迭代應該是對其keys的迭代,字典的items()、keys()、 values()方法都是返回的列表,所以,這裡的for i in a最好寫成for i in a.keys(),效果等同。總之,可以不追究列表解析表示式到底支不支援字典,本質上,列表解析表示式就是個對列表使用了迴圈結構,並生成新的列表的方法。先這樣理解

1. a =

2. b = [i * 2 for i in a]

3. print b

4. #結果為['aa', 'bb']

複製**

5、巢狀

除了字串,列表、元祖、字典可以相互多層次巢狀

1. #第一段

2. b = [1, 2, 3]

3. tup = (4, 5, b)

4. print tup[2]

5. #結果是[1, 2, 3]

6. b[0] = 'x'

7. print tup[2]

8. #結果是['x', 2, 3]

9.10. #第二段

11. b = '123'

12. tup = (4, 5, b)

13. print tup[2]

14. #結果是'123'

15. b = '***'

16. print tup[2]

17. #結果仍然是'123'

複製**

有上面兩段可以看出,巢狀與可變性是不衝突的。

tup = (4, 5, b)中所記憶、錄入的b是個變數指標,或者叫記憶體位址,是個數字。

第一段,b指向乙個列表,列表具有可變性,所以b[0] = 'x'的操作後,所以對元祖的索引能體現出變化;

第二段,b指向乙個字串,字串具有不可變性,所以b = '***'的操作後,b這個指標本身就改變了,重指向另一段記憶體空間,而tup元祖中記憶的記憶體位址(那個曾經的b)所指空間並沒有變,還是字串 '123'。

所以,不管是第一段還是第二段,元祖tup始終保持不可變性,要變化也是其元素作為指標所指向記憶體的變化。

4、列表解析表示式

表示式中支援序列(字串、列表、元祖),不支援對映(字典)。

似乎字典也可以使用在列表解析中

a =

[i * 2 for i in a.items()]

輸出:[('a','zw','a','zw'),('b','ww','b','ww')]

python資料型別

python的資料型別 數字 字串 列表 元祖 字典 檢視型別可以使用type函式如 type abc 數字 整型 長整型 浮點型 複數 字串 單引號 雙引號 3引號 a abcde a 1 b a 2 3 c a 2 4 cd a 2 cde a 2 ace a 1 e a 3 2 c a abc...

python 資料型別

python有五個標準的資料型別 使用del可以刪除資料的引用 例,one 100 del one del 也可以同時刪除多個引用 變數。例del one,two,three print one 將提示one 沒有定義 python支援四種不同的數值型別 python的字串列表有2種取值順序 加號 ...

Python 資料型別

一 整數 python可以處理任意大小的整數,當然包括負整數,在python程式中,整數的表示方法和數學上的寫法一模一樣,例如 1,100,8080,0,等等。計算機由於使用二進位制,所以,有時候用十六進製制表示整數比較方便,十六進製製用0x字首和0 9,a f表示,例如 0xff00,0xa5b4...