Python數據結構-列表,元組,字典,集合

0x01 列表

用來保存一系列有序項目的集合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 訪問列表中的值
list1 = ['Google', 'Youtube', 2017, 2018]
list2 = [1, 2, 3, 4, 5, 6, 7 ]

print("list1[0]: ", list1[0])
print("list2[1:5]: ", list2[1:5])

# 更新列表內容
list = ['Google', 'Youtube', 2017, 2018]
print("The 3rd Element is ".list[2])
list = [2] = 2020
print("The New 3rd Element is ",list[2])

# 刪除列表內容
list = ['Google', 'Runoob', 1997, 2000]

print (list)
del list[2]
print ('删除第三个元素 : ', list)

列表函數

len(list) - 列表裡面元素的數量。
max(list) - 返回列表元素最大值。
min(list) - 返回列表元素最小值。
list(seq) - 將元組轉為列表。

列表的使用方法

append()

list.append(obj) - 在列表末尾添加新的對象。

使用例子

1
2
3
4
5
6
list1 = ['Google', 'Facebook', 'Twitter']
list1.append('Instagram')
print ("更新后的列表 : ", list1)

結果
更新后的列表 : ['Google', 'Facebook', 'Twitter', 'Instagram']

count()

list.count(obj) - 統計某個元素在列表中出現的次數。

使用例子

1
2
3
4
5
6
aList = ['Google', 'Instagram','Facebook', 'Twitter', 'Instagram']

print ("Instagram元素個數 : ", aList.count('Instagram'))

結果
Instagram元素個數 : 2

extend()

list.extend(seq) - 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)。

使用例子

1
2
3
4
5
6
7
list1 = ['Google', 'Instagram','Facebook']
list2=list(range(5)) # 创建 0-4 的列表
list1.extend(list2) # 扩展列表
print ("擴展後的列表:", list1)

結果
擴展後的列表:['Google', 'Instagram','Facebook', 0, 1, 2, 3, 4]

pop()

list.pop(obj=list[-1]) - 移除列表中的一個元素

使用例子

1
2
3
4
5
6
7
8
9
list1 = ['Google','Instagram','Facebook']
list1.pop()
print ("列表現在為 : ", list1)
list1.pop(1)
print ("列表現在為 : ", list1)

結果
列表現在為 : ['Google', 'Instagram','Facebook']
列表現在為 : ['Google']

remove()

list.remove(obj) - 用於移除列表中某個值的第一個匹配項。

使用例子

1
2
3
4
5
6
7
8
9
list1 = ['Google','Instagram','Facebook', 'Twitter']
list1.remove('Facbook')
print ("列表現在為 : ", list1)
list1.remove('Google')
print ("列表現在為 : ", list1)

結果
列表現在為 : ['Google', 'Instagram', 'Twitter']
列表現在為 : ['Instagram', 'Twitter']

reverse()

list.reverse((obj) - 反向列表中元素。

使用例子

1
2
3
4
5
6
list1 = ['Google', 'Facebook', 'Taobao', 'Baidu']
list1.reverse()
print ("列表反轉後: ", list1)

結果
列表反轉後: ['Baidu', 'Taobao', 'Facebook', 'Google']

sort()

list.sort([func]) - 對原列表進行排序,如果指定參數,則使用比較函數指定的比較函數。

使用例子

1
2
3
4
5
6
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list1.sort()
print ("列表排序后: ", list1)

結果
列表排序后: ['Baidu', 'Google', 'Runoob', 'Taobao']

clear()

list.clear() - 清空列表內容。

使用例子

1
2
3
4
5
6
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list1.clear()
print ("列表清空后: ", list1)

結果
列表清空后: [ ]

copy

list.copy() - 複製列表

使用例子

1
2
3
4
5
6
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list2 = list1.copy()
print ("list2 列表: ", list2)

結果
list2 列表: ['Google', 'Runoob', 'Taobao', 'Baidu']

index()

list.index(obj)- 從列表中找出某個值第一個匹配項的索引位置。

1
2
3
4
5
6
7
list1 = ['Google', 'Runoob', 'Taobao','Twitter']
print ('Twitter 索引值為', list1.index('Twitter'))
print ('Google 索引值為', list1.index('Google'))

結果
Twitter 索引值為3
Google 索引值為0

insert()

list.insert(index,obj)- 將指定對象插入列表的指定位置。

1
2
3
4
5
6
list1 = ['Google', 'Yahoo', 'Instargram']
list1.insert(1, 'Catsoda')
print ('列表插入元素后為 : ', list1)

結果
列表插入元素后為 : ['Google', 'Catsoda', 'Yahoo', 'Instargram']

0x02 元組

用來保存一系列有序項目的集合,只是裡面的內容無法更改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 一般使用方法
tup1 = ('Google', 'Yahoo', 1997, 2000)
tup2 = (1,2,3,4,5)
tup3 = () # 創建空組

print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])

結果
tup1[0]: Google
tup2[1:5]: (2,3,4,5)

# 完全刪除元組內容
tup1 = ['Google', 'Duckduckgo', 'Instagram']
del tup1
print (tup1)

結果
Traceback (most recent call last):
File "test.py", line 8, in <module>
print (tup)
NameError: name 'tup' is not defined

# 其他基本使用
len((1,2,3)) # 結果為3
(1,2,3)+(4,5,6) # 結果為(1.2.3.4.5.6)
("Hi",)*3 # ("Hi","Hi","Hi")
for x in(1,2,3):print x # 1 2 3

可應用的函數

  • len(tuple)
  • max(tuple)
  • min(tuple)
  • tuple(seq) - 將列表轉為元組。

0x03 字典

屬於Associative arrays。字典是由键值(Keys)與數值(Values)組成。格式是這樣的d = {key1 : value1, key2 : value2 }。其儲存方式為無序。

key的規則:不可以重複出現。例子若出現重複情況,python只會記住最新賦予的數值。

使用例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

# 訪問裡面的數值
dict = {'Name': 'Milo','Age': 24, 'Class': 'First'}

print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

結果
dict['Name']: Milo
dict['Age']: 24

# 修改字典裡面的內容
dict = {'Name': 'Milo', 'Age': 24, 'Class': 'First'}

dict['Age'] = 8 # 更新年齡
dict['School'] = "W3School" # 加新的信息

print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

結果
dict['Age']: 8
dict['School']: W3School
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

# 刪除自動字典裡面的內容
del dict['Name'] # 删除键 'Name'
dict.clear() # 清空字典
del dict # 删除字典

print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

結果
Traceback (most recent call last):
File "test.py", line 9, in <module>
print ("dict['Age']: ", dict['Age'])
TypeError: 'type' object is not subscriptable

可以應用的函數

  • len(dict) :計算字典裡面到底有多少個元素,就是Key的總數。
  • str(dict):直接輸出整個字典。。
  • type(variable):返回輸入的變數,如果變量為字典,則返回的對象會顯示<class 'dict'>

字典內置方法

radiansdict.clear()

用來刪除字典裡面的所有元素

1
2
3
4
5
6
7
8
dict = {'Name': 'Milo', 'Age': 24, 'Class': 'First'}
print ("字典長度 : %d" % len(dict))
dict.clear()
print ("字典删除后長度 : %d" % len(dict))

結果
字典长度 : 3
字典删除后長度 : 0

radiansdict.copy()

用来返回字典的浅複製。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dict1 =  {'user':'Milo','num':[1,2,3]}

dict2 = dict1
dict3 = dict1.copy() # 深Copy父對象(一級目錄),子對象(二級目錄)不copy。

# 修改data數據
dict1['user']='root'
dict1['num'].remove(1)

# 输出結果
print(dict1)
print(dict2)
print(dict3)

結果
{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'Milo', 'num': [2, 3]}
# dict3的父對象進行了深Copy,因此不會隨著dict1修改而修改,子对象是浅copy會随dict1的修改而修改。

radiansdict.fromkeys()

創建一個新的字典,以序列seq中元素做字典的鍵,value為字典所有鍵對應的初始值。格式如下:
dict.fromkeys(seq[, value]))

  • seq – 字典键值列表。
  • value – 可選參數,設置键序列(seq)的值。
1
2
3
4
5
6
7
8
9
10
11
seq = ('name', 'age', 'book')

dict = dict.fromkeys(seq)
print ("新的字典為 : %s" % str(dict))

dict = dict.fromkeys(seq, 10)
print ("新的字典為 : %s" % str(dict))

結果
新的字典為 : {'age': None, 'name': None, 'book': None}
新的字典為 : {'age': 10, 'name': 10, 'book': 10}

radians.get(key,default=None)

返回指定鍵的值,如果值不在字典中返回default值。
dict.get(key, default=None)

  • key – 字典中要查找的鍵。
  • default – 如果指定鍵的值不存在时,返回该默認值。
1
2
3
4
5
6
7
8
dict = {'Name': 'Milo', 'Age': 24}

print ("Age值為 : %s" % dict.get('Age'))
print ("Book值為 : %s" % dict.get('Book', "NA"))

結果
Age值為 : 24
Book值為 : NA

key in dict

查看字典裡面是否存在某個鍵。

1
2
3
4
5
6
dict = {'Name': 'Milo', 'Age': 24}
if 'Age' in dict:
print ("鍵Age存在"))

結果
鍵Age存在

radiansdict.items()

返回一切字典裡面的Key和Value。

1
2
3
4
5
dict = {'Name': 'Milo', 'Age': 24}
print ("Value : %s" % dict.items())

結果
Value : dict_items([('Age', 24), ('Name', 'Milo')])

radiansdict.keys()

返回字典裡面所有的Key。

1
2
3
4
5
dict = {'Name': 'Milo', 'Age': 24}
print ("字典裡面所有的鍵為: %s" % dict.keys())

結果
字典裡面所有的鍵為: dict_keys[('Age','Name')])

radiansdict.setdefault(key, default=None)

如果Key在字典裡面,返回Defaut的Key以及其對應的Value,反之則新的Key的默認值None。

1
2
3
4
5
6
7
8
9
10
dict = {'Name': 'Milo', 'Age': 24}

print ("Age鍵的值為 : %s" % dict.setdefault('Age', None))
print ("Sex鍵的值為 : %s" % dict.setdefault('Sex', None))
print ("新字典為:", dict)

結果
Age键的值為 : 24
Sex键的值為 : None
新字典為: {'Age': 24, 'Name': 'Milo', 'Sex': None}

radiansdict.update(dict2)

把dict2的值更新到dict裡面。

1
2
3
4
5
6
7
8
dict = {'Name': 'Milo', 'Age': 24}
dict2 = {'Hobby': 'Diabolo' }

dict.update(dict2)
print("更新後的字典為: ", dict)

結果
更新後的字典為:{'Hobby': 'Diabolo','Age': 24,'Name':'Milo'}

radiansdict.values()

返回所有在字典裡面的值

1
2
3
4
5
6
dict = {'Name': 'Milo', 'Age': 24,'Hobby': 'Diabolo'}

print("更新後的字典為: ", list(dict.values()))

結果
更新後的字典為:{'Diabolo', 24, 'Milo'}

pop(key[,default])

用來刪除字典給固定的鍵key所對應的值,返回的值是被刪除的值,因此必須給key,否則返回的會是Default的值。

1
2
3
4
>>> site= {'name': '量子城', 'post': 25, 'url': 'http://diabolo94.github.io/'}
>>> pop_obj=site.pop('name')
>>> print(pop_obj)
量子城

popitem()

隨機返回並且刪除字典裡中的一對Key和Value,通常刪除最後的那一Pair。

1
2
3
4
5
6
7
8
site= {'name': '量子城', 'post': 25, 'url': 'http://diabolo94.github.io/'}
pop_obj=site.popitem()
print(pop_obj)
print(site)

結果
('url', 'http://diabolo94.github.io/')
{'name': '量子城', 'post': 25}

關於集合以後補上。

0%