1. list的初始化
1.1 使用for初始化list
>>>list1 = [1, 2, 3, 4]
>>>list2 = ['a', 'b', 'c']
# 這種寫法結果元素數量 = list1元素數量 *
>>>list3 = [(i, j) for i in list1 for j in list2]
>>>list3
[(1, 'a'),
(1, 'b'),
(1, 'c'),
(2, 'a'),
(2, 'b'),
(2, 'c'),
(3, 'a'),
(3, 'b'),
(3, 'c'),
(4, 'a'),
(4, 'b'),
(4, 'c')]
>>>list4 = [(i, j) for i, j in zip(list1, list2)]
>>>list4
[(1, 'a'), (2, 'b'), (3, 'c')]
2. 增刪改查
2.1 增加元素
1)append(object): 在list的尾部增加元素
注意:無返回值,會直接改變原列表;
>>>list1 = [1, 2, 3, 4]
>>>res = list1.append(54)
>>>list1
[1, 2, 3, 4, 54]
>>>type(res)
NoneType
2)insert(index, object): 在索引index之前插入元素object;
也可以理解爲,插入之後,object的索引爲index;
注意:無返回值,會直接改變原list;
注意:如果index大於最大索引,則會在list末尾增加元素;
>>>a = [1, 2, 3]
>>>a.insert(0, 111) # 在開頭插入元素
a
>>>Out[12]: [111, 1, 2, 3]
>>>a.insert(2, 222) # 在索引2之前插入元素
>>>a
Out[14]: [111, 1, 222, 2, 3]
>>>a.insert(100, 333) # 在list末尾插入元素
>>>a
Out[16]: [111, 1, 222, 2, 3, 333]
>>>a.insert(-1, 999) # 在末尾元素之前插入元素
>>>a
Out[19]: [111, 1, 222, 2, 3, 999, 333]
2.2 list合併
1) 用 + 合併list
多個list可以直接用加號來合併
>>>list1 = [1, 2, 3, 4]
>>>list2 = ['a', 'b', 'c']
>>>list3 = list1 + list2
>>>list3
[1, 2, 3, 4, 'a', 'b', 'c']
2) 使用 * 展開list進行合併
>>>list1 = [1, 2, 3, 4]
>>>list2 = ['a', 'b', 'c']
>>>list4 = [*list1, *list2]
>>>list4
[1, 2, 3, 4, 'a', 'b', 'c']
3) extend(iterable) : 將可迭代對象中的元素插入到list末尾
>>>a = [1, 2, 3]
>>>b = ['a', 'b', 'c']
>>>a.extend(b) # 合併另一個list中的元素
>>>a
Out[34]: [1, 2, 3, 'a', 'b', 'c']
>>>c = (100, 200) # 合併tuple中的元素
>>>a.extend(c)
>>>a
Out[38]: [1, 2, 3, 'a', 'b', 'c', 100, 200]
>>>d = {'A':33, 'B':54} # 合併dict中的元素(只能合併鍵key)
>>>a.extend(d)
>>>a
Out[43]: [1, 2, 3, 'a', 'b', 'c', 100, 200, 'A', 'B']
>>>e = set([3,3,5]) # 合併set中的元素
>>>a.extend(e)
>>>a
Out[47]: [1, 2, 3, 'a', 'b', 'c', 100, 200, 'A', 'B', 3, 5]
2.3 刪除元素
1) remove(object): 按值刪除元素(刪除某個值的第一個出現)
注意:沒有返回值,執行後會直接改變原列表的內容。
注意:如果list中有多個相同的元素,remove只會刪除一個,不會把相同的元素全部刪掉。
注意:如果list中不存在object,則會報錯。
>>>list1 = [1, 2, 3, 4]
>>>res = list1.remove(3)
>>>list1
[1, 2, 4]
>>>type(res)
NoneType
>>>a = [1,2,3,3,4] # 只刪除第一個出現
>>>a.remove(3)
>>>a
Out[50]: [1, 2, 3, 4]
2) pop(index= -1): 按索引刪除元素,默認刪除末尾元素
返回值爲刪除的元素的值;
注意:如果索引超出範圍或list爲空,會報錯;
>>>a = [1,2,3,4]
>>>a.pop()
Out[53]: 4
>>>a
Out[54]: [1, 2, 3]
>>>a.pop(0) # 刪除
Out[55]: 1
>>>a
Out[56]: [2, 3]
>>>a.pop(5) # 索引超出範圍或list爲空,會報錯
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-57-353f8a3b72c0>", line 1, in <module>
a.pop(5)
IndexError: pop index out of range
3)clear() : 清除list中所有元素
無返回值,執行完後原list變爲空list;
>>>a = [1,2,3,4]
>>>a
Out[62]: [1, 2, 3, 4]
>>>type(a)
Out[64]: list
>>>a.clear()
>>>a
Out[66]: []
>>>type(a)
Out[67]: list
2.4 改
直接使用 a[ind] = new_value 的方式修改索引ind處的值;
>>>a = [1,2,3]
>>>a[0] = 999
>>>a
Out[70]: [999, 2, 3]
>>>a[-1] = 9009
>>>a
Out[72]: [999, 2, 9009]
2.5 查
1) index(object, start, stop) : 返回首次出現object這個值的索引
在list的[start, stop)索引範圍內查找object。
返回:首次出現object的索引;
注意:範圍不包含stop!
注意:當list中不存在object時,會報錯!
>>>a = [1, 2, 3, 4, 5, 6, 999, 2, 9009]
>>>a.index(1)
Out[91]: 0
>>>a.index(4)
Out[92]: 3
>>>a.index(2) # 返回第一個2出現的索引
Out[93]: 1
>>>a.index(4, 0, 4) # # 實際檢索的索引範圍是[0, 3],所以能查到4
Out[94]: 3
>>>a.index(4, 0, 3) # 實際檢索的索引範圍是[0, 2],所以查不到4
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-95-123898f8a295>", line 1, in <module>
a.index(4, 0, 3)
ValueError: 4 is not in list
3. 排序
3.1 sort(key=None, reverse=False): list自帶的排序方法
key – 當list中存儲的是其它可迭代對象時,如list、tuple、set等,可以通過key傳入自定義的方法,用來選擇排序時根據可迭代對象中的第幾個元素來排序;更高階的,可以根據可迭代對象中的某幾個元素的運算結果來排序。 建議使用lambda表達式來自定義函數!
reverse – 排序方向,reverse = False 升序(默認),reverse = True 降序, 。
注意:sort()方法無返回值,直接改變原list。
例1:常用,通過reverse改變排序方向:
>>>a = [98, 76, 108, 12, 2, 999]
>>>a
Out[9]: [98, 76, 108, 12, 2, 999]
>>>a.sort()
>>>a
Out[11]: [2, 12, 76, 98, 108, 999]
>>>a.sort(reverse=True)
>>>a
Out[13]: [999, 108, 98, 76, 12, 2]
例2:對複雜結構的list排序 :key傳入自定義函數( 建議使用lambda表達式! )
>>>def take_second(tup): # tup爲list中的子迭代對象,return tup[1]是指返回子對象中的第2個元素
return tup[1]
>>>b = [('a', 3), ('b', 1), ('c', 99)]
>>>b.sort(key=take_second) # 根據tuple中的第2個元素對tuple來進行排序
>>>b
Out[22]: [('b', 1), ('a', 3), ('c', 99)]
>>>b.sort(key=take_second, reverse=True)
>>>b
Out[24]: [('c', 99), ('a', 3), ('b', 1)]
>>>b = [('a', 3), ('b', 1), ('c', 99)]
>>>b.sort(key=lambda x: x[1]) # 建議使用lambda表達式!
>>>b
Out[35]: [('b', 1), ('a', 3), ('c', 99)]
例3:根據名字的長度排序
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>def length_of_name(tup):
return len(tup[0])
>>>c.sort(key=length_of_name)
>>>c
Out[29]: [('sun', 1), ('wang', 3), ('tian', 99), ('aduan', 203)]
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>c.sort(key=lambda x: len(x[0]))
>>>c
Out[29]: [('sun', 1), ('wang', 3), ('tian', 99), ('aduan', 203)]
例4:根據名字的首字母的字母順序排序
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>c.sort(key=lambda x: x[0][0])
>>>c
Out[44]: [('aduan', 203), ('sun', 1), ('tian', 99), ('wang', 3)]
3.2 sorted(iterable, key=None, reverse=False)
Python的內建函數sorted,可以對所有可迭代對象排序,當然也可以對list排序;
key和reverse參數與list的sort方法一致:
key – 當list中存儲的是其它可迭代對象時,通過key傳入自定義函數,用來選擇排序時根據什麼規則;簡單說就是根據自定義函數返回值的大小來對原對象進行排序。 建議使用lambda表達式來自定義函數!
reverse – 排序方向,reverse = False 升序(默認),reverse = True 降序 。
注意: 返回值是排序後的可迭代對象,不會改變原對象的值!
例1:根據名字的首字母的字母順序排序; (可以看到原list不變,返回的是一個排序好的新的list)
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>sorted(c, key=lambda x: x[0][0])
Out[47]: [('aduan', 203), ('sun', 1), ('tian', 99), ('wang', 3)]
>>>c
Out[48]: [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]