集合型別
Python 中有許多集合型別。雖然 int
和 str
等型別包含單個值,但集合型別包含多個值。
清單
list
型別可能是 Python 中最常用的集合型別。儘管它的名字,列表更像是其他語言中的陣列,主要是 JavaScript。在 Python 中,列表只是有效 Python 值的有序集合。可以通過在方括號中用逗號分隔值來建立列表:
int_list = [1, 2, 3]
string_list = ['abc', 'defghi']
列表可以為空:
empty_list = []
列表的元素不限於單個資料型別,這是合理的,因為 Python 是一種動態語言:
mixed_list = [1, 'abc', True, 2.34, None]
列表可以包含另一個列表作為其元素:
nested_list = [['a', 'b', 'c'], [1, 2, 3]]
可以通過索引或其位置的數字表示來訪問列表的元素。Python 中的列表是*零索引的,*這意味著列表中的第一個元素位於索引 0 處,第二個元素位於索引 1 處,依此類推:
names = ['Alice', 'Bob', 'Craig', 'Diana', 'Eric']
print(names[0]) # Alice
print(names[2]) # Craig
指數也可以是負數,這意味著從列表的末尾開始計數(-1
是最後一個元素的索引)。因此,使用上面示例中的列表:
print(names[-1]) # Eric
print(names[-4]) # Bob
列表是可變的,因此你可以更改列表中的值:
names[0] = 'Ann'
print(names)
# Outputs ['Ann', 'Bob', 'Craig', 'Diana', 'Eric']
此外,可以從列表中新增和/或刪除元素:
使用 L.append(object)
將物件附加到列表末尾,返回 None
。
names = ['Alice', 'Bob', 'Craig', 'Diana', 'Eric']
names.append("Sia")
print(names)
# Outputs ['Alice', 'Bob', 'Craig', 'Diana', 'Eric', 'Sia']
在特定索引處新增要列出的新元素。L.insert(index, object)
names.insert(1, "Nikki")
print(names)
# Outputs ['Alice', 'Nikki', 'Bob', 'Craig', 'Diana', 'Eric', 'Sia']
使用 L.remove(value)
刪除第一次出現的值,返回 None
names.remove("Bob")
print(names) # Outputs ['Alice', 'Nikki', 'Craig', 'Diana', 'Eric', 'Sia']
獲取值為 x 的第一個專案列表中的索引。如果沒有這樣的專案,它將顯示錯誤。
name.index("Alice")
0
計算列表的長度
len(names)
6
計算列表中任何專案的出現次數
a = [1, 1, 1, 2, 3, 4]
a.count(1)
3
翻轉清單
a.reverse()
[4, 3, 2, 1, 1, 1]
# or
a[::-1]
[4, 3, 2, 1, 1, 1]
使用 L.pop([index])
刪除並返回索引處的專案(預設為最後一項),返回該專案
names.pop() # Outputs 'Sia'
你可以迭代列表元素,如下所示:
for element in my_list:
print (element)
元組
tuple
類似於列表,除了它是固定長度和不可變的。因此,元組中的值不能更改,也不能將值新增到元組或從元組中刪除。元組通常用於不需要更改的小型值集合,例如 IP 地址和埠。元組用括號表示而不是方括號:
ip_address = ('10.20.30.40', 8080)
列表的相同索引規則也適用於元組。元組也可以巢狀,值可以是任何有效的 Python 有效。
必須以這種方式定義只有一個成員的元組(注意逗號):
one_member_tuple = ('Only member',)
要麼
one_member_tuple = 'Only member', # No brackets
或者只是使用 tuple
語法
one_member_tuple = tuple(['Only member'])
字典
Python 中的 dictionary
是鍵值對的集合。字典被花括號包圍。每對用逗號分隔,鍵和值用冒號分隔。這是一個例子:
state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
要獲取值,請通過其鍵引用它:
ca_capital = state_capitals['California']
你還可以獲取字典中的所有鍵,然後迭代它們:
for k in state_capitals.keys():
print('{} is the capital of {}'.format(state_capitals[k], k))
字典非常類似於 JSON 語法。Python 標準庫中的本機 json
模組可用於在 JSON 和字典之間進行轉換。
組
set
是元素的集合,沒有重複,沒有插入順序,但排序順序。它們用於以下情況:將某些事物組合在一起非常重要,而不是包含它們的順序。對於大型資料組,檢查元素是否在 set
中要比對 list
執行相同操作要快得多。
定義 set
非常類似於定義 dictionary
:
first_names = {'Adam', 'Beth', 'Charlie'}
或者你可以使用現有的 list
構建一個 set
:
my_list = [1,2,3]
my_set = set(my_list)
使用 in
檢查 set
的成員資格:
if name in first_names:
print(name)
你可以像列表一樣遍歷 set
,但請記住:值將以任意實現定義的順序進行。
defaultdict
defaultdict
是一個具有鍵預設值的字典,因此可以無錯誤地訪問未明確定義任何值的鍵。當字典中的值是集合(列表,字串等)時,defaultdict
特別有用,因為每次使用新金鑰時都不需要初始化它。
defaultdict
永遠不會引發 KeyError。任何不存在的鍵都會返回預設值。
例如,請考慮以下字典
>>> state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
如果我們嘗試訪問一個不存在的鍵,python 會返回一個錯誤,如下所示
>>> state_capitals['Alabama']
Traceback (most recent call last):
File "<ipython-input-61-236329695e6f>", line 1, in <module>
state_capitals['Alabama']
KeyError: 'Alabama'
讓我們嘗試一下 defaultdict
。它可以在 collections 模組中找到。
>>> from collections import defaultdict
>>> state_capitals = defaultdict(lambda: 'Boston')
我們在這裡做的是設定一個預設值( 波士頓 ),以防 Give 鍵不存在。現在像以前一樣填充 dict:
>>> state_capitals['Arkansas'] = 'Little Rock'
>>> state_capitals['California'] = 'Sacramento'
>>> state_capitals['Colorado'] = 'Denver'
>>> state_capitals['Georgia'] = 'Atlanta'
如果我們嘗試使用不存在的金鑰訪問 dict,python 將返回預設值,即 Boston
>>> state_capitals['Alabama']
'Boston'
並返回現有鍵的建立值,就像普通的 dictionary
一樣
>>> state_capitals['Arkansas']
'Little Rock'