list (列表)和tuple(元組)
- list和tuple是Python內(nèi)置的有序集合,一個可變,一個不可變。根據(jù)需要來選擇使用它們。
- 列表和字符串有很多通用的屬性,例如索引和切割操作。它們是 序列 類型(參見 Sequence Types — list, tuple, range )中的兩種。
1. 列表 list
-
聲明
list
使用方擴號表示法,列表中的元素可以使任意類型
nums = [10, 20, 40, 30, 25]
len()
獲取列表長度-
可以通過索引(下標(biāo))訪問,索引還可以為負值
classmates = ['Michael', 'Bob', 'Tracy'] classmates[-1] #獲取倒數(shù)第一個
?
-
list的方法
方法 參數(shù) 作用 改變本身? list.append() obj 向list的末尾添加元素 是 list.pop() [index] 刪除指定索引的元素并返回,不傳參數(shù)則刪除最后一個元素, 是 list.insert() index,ele 把 obj
插入到指定的index
的位置是 list.count() x 統(tǒng)計 x
在列表中出現(xiàn)的次數(shù)否 list.sort() 排序,List中不能含有字符串 是 list.reverse() 倒序列表中的元素 是 list.remove() x 刪除List中的 值 為 x
第一個元素,如果沒有返回錯誤(注意是 值 )是 list.copy() 返回列表的淺拷貝 否 nums1 = [10, 20, 40, 30, 25] nums1.append(1000) print(nums1) nums1.pop(0) print(nums1) nums1.insert(2, 2000) print(nums1)
當(dāng)作堆棧使用,后進先出
可以直接用
+
號連接支持
in
和not in
判斷是否存在可以嵌套(類似二維數(shù)組)
-
列表推倒(List Comprehensions),一種創(chuàng)造列表更加簡潔的方式
列表推導(dǎo)的語法:
[表達式 for item in 序列]
會對序列中的每個 item 執(zhí)行表達式, 然后把值存入到一個新的列表中.
#列表推導(dǎo)創(chuàng)建列表 nums = [x**3 for x in range(10)]; #常規(guī)創(chuàng)建 for i in range(10): nums1.append(i**3); print(nums1) #擴展用法 squ = [(x,y)for x in [1,2,3] for y in [1,2,3]]; squ1 = [x for x in range(10)] squ2 = [x*2 for x in squ1] print(squ1,squ2) >>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] squ3 = [(x,y) for x in squ1 if x>5 for y in squ2 if y < 3] print(squ3) >>>[(6, 0), (6, 2), (7, 0), (7, 2), (8, 0), (8, 2), (9, 0), (9, 2)]
?
?
2. 元組 tuple
元組在輸出時總是有括號的
只有1個元素的tuple定義時必須加一個逗號
,
來消除歧義 。丑陋,但是有效元組有很多用途。例如 (x, y) 坐標(biāo)對,數(shù)據(jù)庫中的員工記錄等等。元組就像字符串, 不可變的。
-
構(gòu)造方法:
一對空括號可以創(chuàng)建空元組
創(chuàng)建一個 單元素 元組 可以在值后面跟一個逗號
-
元組的封裝
empty = () # <---創(chuàng)建空元組 singleton = 'hello', # <---創(chuàng)建一個單元素元組 singleton = ('hello',) # <---也是創(chuàng)建一個單元素元組 t = 12345, 54321, 'hello!' # <---元組的封裝
3.序列拆封(解包)
x, y, z = t
序列拆封要求左側(cè)的變量數(shù)目與序列的元素個數(shù)相同
可變參數(shù)(multiple assignment )其實只是元組封裝和序列拆封的一個結(jié)合。
-
如果是使用的嵌套序列,解包用起來比較方便
nums = [ [10,20,30,40], (20,30,50,808), (100,200,300,400) ] x,y,z = nums for x,y,z,a in nums: # <---重點:左側(cè)變量數(shù)目要與序列元素個數(shù)相同 print(x,y,z,a)
4. del語句
根據(jù)指定的索引刪除一個子項,與
pop()
不同之處在于del
不會返回值.-
del
還可以從列表中刪除切片或清空整個列表>>> a = [-1, 1, 66.25, 333, 333, 1234.5] >>> del a[0] >>> a [1, 66.25, 333, 333, 1234.5] >>> del a[2:4] >>> a [1, 66.25, 1234.5] >>> del a[:] >>> a [] >>> del a #<--- 也可以直接刪除變量
?