序列
序列是一種數據存儲方式,用方括號標注,逗號分隔的一組值。在內存中,序列就是一塊用來存放多個值的連續的內存空間。
常見序列結構有:字符串、列表、元組、字典、集合
列表
用于存儲任意數目,任意類型的數據集合
[]創建
a = [10,20,'www','ggg']
a = [] #創建一個空的列表對象
list()創建
使用list()可以將任意可迭代的數據轉化為列表。
a = list() #創建一個空的列表對象
a = list(range(10)) #range返回的是一個range對象,而不是列表
a
[0,1,2,3,4,5,6,7,8,10]a = list("wwwwww")
a
['w','w','w','w','w','w']
推導式生成列表
a = [x*2 for x in range(5)]
a
[0,2,4,6,8]
切片操作會返回新的對象
rgba = ["Red", "Green", "Blue","Alph"]
correct_rgba = rgba[:]
correct_rgba[-1] = "Alpha"
correct_rgba
["Red", "Green", "Blue", "Alpha"]
rgba
["Red", "Green", "Blue", "Alph"]
append()
原地修改列表對象,在列表尾部添加新的元素。不創建新的列表對象。
a = [10,20]
a.append(30)
a
[10,20,30]
+運算符
并不是真正在尾部添加元素,而是創建新的列表對象,將原列表的元素和新列表的元素依次復制到新的列表對象中。這樣會設計大量的復制操作,對于操作大量元素不建議使用。創建了新的列表對象。
extend()
將目標列表的所有元素添加到本列表的尾部,屬于原地操作,不創建新的列表對象。
a = [20,40]
a.extend([60,80])
a
[20,40,60,80]
insert()
將指定元素插入到列表對象的任意指定位置。這樣會讓插入位置后的所有元素移動。
乘法擴展
a = ['www',666]
b = a*3
a
['www',666,'www',666,'www',666]
del
刪除列表指定位置的元素
a = [1,2,3,40]
del a[1]
a
[1,3,40]
pop()
刪除并返回指定位置的元素,如果未指定位置則默認操作列表最后一個元素。
a = [10,20,30,40,50]
a.pop()
50
a
[10,20,30,40]
remove()
刪除首次出現的指定元素,若不存在該元素,拋出 ValueError 異常。
clear()
移除列表中的所有項。 類似于 del a[:]。
copy()
返回列表的淺拷貝。 類似于 a[:]。
列表也可以用作隊列,然而,列表作為隊列的效率很低。因為,在列表末尾添加和刪除元素非常快,但在列表開頭插入或移除元素卻很慢(因為所有其他元素都必須移動一位)。
實現隊列最好用 collections.deque,可以快速從兩端添加或刪除元素。
from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry") # Terry 到了
queue.append("Graham") # Graham 到了
queue.popleft() # 第一個到的現在走了
'Eric'
queue.popleft() # 第二個到的現在走了
'John'
queue # 按到達順序排列的剩余隊列
deque(['Michael', 'Terry', 'Graham'])
元組tuple
元組屬于不可變序列,不能修改元組中的元素。因此,元組沒有增加元素、修改元素、刪除元素相關的方法。
()創建,小括號可以省略
a = (1,2,3) # 或a = 1,2,3
**如果元組只有一個元素,則必須后面加逗號。**解釋器會把(1)解釋為整數1,(1,)才被解釋為元組。
# 元組可以嵌套:
t = (5,4,3,2,1)
u = t, (1, 2, 3, 4, 5)
u
((5,4,3,2,1), (1, 2, 3, 4, 5))# 但它們可以包含可變對象:
v = ([1, 2, 3], [3, 2, 1])
v
([1, 2, 3], [3, 2, 1])
zip
zip(列表1,列表2,…)將多個列表對應位置的元素組合成為元組,并返回這個zip對象。
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
d = zip(a,b,c)
list(d)
[(1,2,3),(4,5,6),(7,8,9)]
特點
- 不可變序列
- 元組的訪問和處理速度比列表快
- 整數、字符串和元組可以作為字典的鍵,列表可變不能作為字典的鍵使用。
字典
字典是鍵值對的無序可變序列,字典中的每個元素都是一個“鍵值對”。字典是以 鍵 來索引的,鍵可以是任何不可變類型;字符串和數字總是可以作為鍵。 元組在其僅包含字符串、數字或元組時也可以作為鍵;如果一個元組直接或間接地包含了任何可變對象,則不可以用作鍵。字典的鍵必須是唯一的。
{},dict()創建字典對象
花括號 {} 用于創建空字典。
a = {'name':'www','age':18,'job':'student'} #花括號
b = dict(name='www',age=18,job='student')
c = dict([('name','www'),('age',18),('job','student')]) #鍵值對序列
d = {}
e = dict()
zip()
k = ['name','age','job']
v = ['www',18,'student']
d = dict(zip(k,v))
d
{'name':'www','age':18,'job':'student'}
字典元素的訪問
- 通過鍵訪問值
a['name']
'www'
- 通過get()獲取值
a.get('name')
'www'
- 通過items()列出所有鍵值對
- 通過keys()列出所有鍵
- 通過values()列出所有值
字典核心底層原理
集合
集合是無序可變,元素不能重復。底層是字典實現,集合的所有元素都是字典的鍵對象,因此是不能重復的且唯一的。
使用{}創建集合對象
創建空集合只能用set(),不能用{},{}創建的是空字典。
a = {3,5,7}
a
{3,5,7}
a.add(9)
a
{9,3,5,7}
使用set(),將列表、元組等可迭代對象轉成結合。
a = ['a','b','c','b']
b = set(a)
b
{'a','b'},'c'