1. 程式人生 > >python列表型別

python列表型別

序列

序列是Python中最基本的資料結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。

Python中常見的序列結構有:字串、列表、集合、元組、字典等。

序列都可以進行的操作包括索引,切片,加,乘,檢查成員。

例如一個整數序列a=[10,20,30,40],可以表示為:

10 20 30 40

由於python3中一切皆物件,在記憶體中實際儲存的是物件的地址,而非物件的值: 在這裡插入圖片描述

列表建立

  • 基本語法 [] 建立
>>> a = [1,2,3,4]
>>> a
[1, 2, 3, 4]
  • list()建立

list可將迭代資料轉化為列表:

>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list("Rico")
['R', 'i', 'c', 'o']

list()產生一個空列表:

>>> list()
[]
  • 使用推導式建立:
>>> a = [2*x for x in range(5)]
>>> a
[0, 2, 4, 6, 8]
>>> a = [x for x in range(100) if x%5 == 0]
>>> a
[0, 5, 10, 15, 20, 25, 30
, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

列表元素的增加和刪除

  • +運算子操作 生成一個新的列表,將兩個列表拼接為一個新列表:
>>> a = [0,1,2,3,4]
>>> a + [5]
[0, 1, 2, 3, 4, 5]
>>> a = [0,1,2]
>>> b= [3,4,5]
>>> a+b
[0, 1, 2, 3, 4, 5]
  • 使用.append()的方法 在列表尾部新增一個元素:
>>> a = [0,1,2,3,
4] >>> a.append(5) >>> a [0, 1, 2, 3, 4, 5]
  • 使用.exrend()的方法: 將目標所有元素新增到列表的尾部,效果類似於+拼接
>>> a = [0,1,2]
>>> b = [3,4,5]
>>> a.extend(b)
>>> a
[0, 1, 2, 3, 4, 5]

注意:用 + 拼接和 .append() 、.extend()的區別:+修改的整個列表物件,而.append()僅僅修改了物件的值。

>>> a = [0,1,2,3,4]
>>> id(a)
2394342943176
>>> a.append(5)
>>> a
[0, 1, 2, 3, 4, 5]
>>> id(a)
2394342943176
>>> a = [0,1,2]
>>> b = [3,4,5]
>>> id(a)
2394342942472
>>> a.extend(b)
>>> a
[0, 1, 2, 3, 4, 5]
>>> id(a)
2394342942472
>>> a = [0,1,2,3,4]
>>> id(a)
2394342943176
>>> a = a+[5]
>>> id(a)
2394342849224

因此通常不推薦使用+拼接操作。

  • .insert()的使用 在將物件插入列表的某一個位置 語法格式:list.insert(index, obj)
>>> a = [0,1,3,4,5]
>>> a.insert(2,6)
>>> a
[0, 1, 6, 3, 4, 5]

列表元素的刪除

  • del 刪除 刪除表格指定位置的元素
>>> a = [10,20,66,40,50]
>>> del a[2]
>>> a
[10, 20, 40, 50]

原理: 在這裡插入圖片描述 將目標元素刪除,其後的元素位置都會發生變化。

  • .pop()方法 刪除並返回指定位置元素,如果未指定則預設刪除列表最後一個元素。
>>> a = [10,20,66,40,50]
>>> b = a.pop(2)
>>> b
66
>>> c = a.pop()
>>> c
50
>>> a
[10, 20, 40]
>>> 
  • .remove()方法 刪除首次出現的指定元素,若指定元素不存在則丟擲異常。
>>> a = [10,20,30,20,40,20,50]
>>> a.remove(20)
>>> a
[10, 30, 20, 40, 20, 50]

列表排序

  • .sort(),修改原列表,不建立新列表的排序

list.sort() 升序排列

>>> a = [10,50,40,20,30]
>>> a.sort()
>>> a
[10, 20, 30, 40, 50]

list.sort(reverse=True) 降序排列

>>> a = [10,50,40,20,30]
>>> a.sort(reverse=True)
>>> a
[50, 40, 30, 20, 10]
  • sorted(),新建列表的排序 通過內建函式sorted()進行排序,返回新列表,不對原列表進行修改。

sored()升序,sorted(list,reverse=True)降序

>>> a = [10,50,40,20,30]
>>> b = sorted(a)
>>> b
[10, 20, 30, 40, 50]
>>> a
[10, 50, 40, 20, 30]
>>> c = sorted(a,reverse=True)
>>> c
[50, 40, 30, 20, 10]
  • .reverse(),列表反向排列
>>> a = [10,50,40,20,30]
>>> a.reverse()
>>> a
[30, 20, 40, 50, 10]
  • reversed()返回迭代器 內建函式reversed()也支援逆序排列,與.reverse()不同的是,內建函式reversed()不對原列表做任何修改,而是返回一個逆序排列的迭代器物件。
>>> a = [10,50,40,20,30]
>>> b = reversed(a)
>>> b
<list_reverseiterator object at 0x000001D7090C6198>
>>> list(b)
[30, 20, 40, 50, 10]
>>> b
<list_reverseiterator object at 0x000001D7090C6198>
>>> list(b)
[]

從程式碼中可以看到,使用reversed()返回的不是一個列表,需要使用list()將迭代器中的儲存資訊傳遞到列表中。迭代器在使用之後會被釋放,所以只能使用一次。