python中列表list的初始化及增刪改查

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)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章