列表
列表用中括號[ ]把各種數據框起來,每一個數據叫作“元素”。
每個元素之間都要用英文逗號隔開
各種類型的數據(整數/浮點數/字符串)
————————————————————————————
從列表提取單個元素
每個元素都有自己的位置編號(即偏移量)
1.偏移量是從0開始的
2.列表名后加帶偏移量的中括號,就能取到相應位置的元素
students = ['小明','小紅','小剛']
print(students[0])
小明
—————————————————————————————
從列表提取多個元素
用冒號來截取列表元素的操作叫作切片
將列表的某個片段拿出來處理
列表切片口訣
左右空,取到頭;左要取,右不取
#冒號左邊空,就要從偏移量為0的元素開始取;右邊空,就要取到列表的最后一個元素
#冒號左邊數字對應的元素要拿,右邊的不動
>>> list2 = [5,6,7,8,9]
>>> print(list2[:])
[5, 6, 7, 8, 9]
>>> print(list2[2:])
[7, 8, 9]
>>> print(list2[:2])
[5, 6]
>>> print(list2[1:3])
[6, 7]
>>> print(list2[2:4])
[7, 8]
————————————————————————
切片和偏移量對比
偏移量取到的是列表中的元素,而切片則是截取了列表的某部分
#使用偏移量提取單一元素,結果顯示:
>>> students = ['小明','小紅','小剛']
>>> print(students[2])
小剛
#使用切片,即使結果仍然只有一個元素,但顯示為列表:
>>> print(students[2:])
['小剛']
特別地,a,b,c=students,也可以提取出列表中的元素,變量分別用逗號隔開,且變
量的數量與列表元素個數一致,最終列表元素會分別賦值給變量,例如
1 appetizer = ['話梅花生','拍黃瓜','涼拌三絲'] 2 a,b,c=appetizer 3 4 print(a) 5 print(b) 6 print(c) 7 print(a,b,c) 8 9 #話梅花生 10 #拍黃瓜 11 #涼拌三絲 12 #話梅花生 拍黃瓜 涼拌三絲
————————————————————————————
給列表增加/刪除元素
append()函數
append()給列表增加元素,每次只能增加一個元素
報錯信息
>>> list3.append(4,5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)
>>> list3 = [1,2]
>>> list3.append(3)
>>> print(list3)
[1, 2, 3]
>>> list3.append([4,5]) #列表內部支持嵌套,單個列表也會視為一個元素
>>> print(list3)
[1, 2, 3, [4, 5]]
————————————————————————————
合並列表
把A和B的成績合並成一個列表,並按照從低到高的順序排序
list1 = [91, 95, 97, 99] #A
list2 = [92, 93, 96, 98] #B
# 把 A 組成績賦值給一個新列表,用來存合並的成績——這個細節要注意!
list3 =list1
list3.extend(list2) #list3 = list1 + list2也可以
print(list3)
[91, 95, 97, 99, 92, 93, 96, 98]
list3.sort()
print(list3)
[91, 92, 93, 95, 96, 97, 98, 99]
列表排序
————————————————————————————
del語句
students = ['小明','小紅','小剛','小美']
del students[3] #語法是:del 列表名[元素的索引]
print(students)
['小明', '小紅', '小剛']
既能刪除一個元素,也可以刪除多個
(原理和切片類似,左取右不取)
###############################################
數據類型:字典
1.有名稱;
2.要用=賦值;
3.用逗號作為元素間的分隔符
字典的外層是大括號{ }
字典的元素是由一個個鍵值對構成的,用英文冒號連接
scores = {'小明':95,'小紅':90,'小剛':90}
字典中的鍵具備唯一性,而值可重復
擴展知識:len()函數
得出一個列表或者字典的長度(元素個數)
>>> students = ['小明','小紅','小剛']
>>> scores = {'小明':95,'小紅':90,'小剛':90}
>>> print(len(students))
3
>>> print(len(scores))
3
字典提取元素
字典靠的是鍵
scores = {'小明': 95, '小紅': 90, '小剛': 90}
print(scores['小明']) #print字典名[字典的鍵]
95
給字典增加/刪除元素
刪除
del 字典名[鍵]
增加
字典名[鍵] = 值
scores = {'小明':95,'小紅':90,'小剛':90}
del scores['小剛']
scores['小剛'] = 92
scores['小美'] = 85
print(scores)
{'小明': 95, '小紅': 90, '小剛': 92, '小美': 85}
——————————————————————————
擴展
Python字典 items()函數以列表返回可遍歷的(鍵, 值) 元組數組。
語法:
dict.items()
列子:
scores = {'語文':89, '數學':95, '英語':80}
print(scores.items())
dict_items([('語文', 89), ('數學', 95), ('英語', 80)]) #列表包含元組數組
遍歷字典項
for a in scores.items():
print(a)
('語文', 89) #元組數組
('數學', 95)
('英語', 80)
遍歷字典值
for a,b in scores.items(): #寫成 for (a,b) in scores.items(): 或for a, b in scores.items():
print(a,b)
語文 89
數學 95
英語 80
#####################################################
列表和字典的異同
不同點
元素是有自己明確的“位置”的,
所以即使看似相同的元素,
只要在列表所處的位置不同,
它們就是兩個不同的列表
>>> students1 = ['小明','小紅','小剛']
>>> students2 = ['小剛','小明','小紅']
>>> print(students1 == students2)
False
字典相比起來就顯得隨和很多,
調動順序也不影響。
因為列表中的數據是有序排列的,
而字典中的數據是隨機排列的
>>> scores1 = {'小明':95,'小紅':90,'小剛':100}
>>> scores2 = {'小剛':100,'小明':95,'小紅':90}
>>> print(scores1 == scores2)
True
總結:列表有序,要用偏移量定位;字典無序,便通過唯一的鍵來取值
————————————————————————————————————
相同點
1.修改元素,可以用賦值
list1 = ['小明','小紅','小剛','小美']
list1[1] = '小藍'
print(list1)
['小明', '小藍', '小剛', '小美']
dict1 = {'小明':'男'}
dict1['小明'] = '女'
print(dict1)
{'小明': '女'}
#del語句通常是用來刪除確定不需要的鍵值對
2.支持任意嵌套
列表嵌套
students = [['小明','小紅','小剛','小美'],['小強','小蘭','小偉','小芳']]
print(students[1][3]) #先判斷是列表第幾個元素,再判斷列表中要取出元素的偏移量
小芳
字典嵌套
scores = {
'第一組':{'小明':95,'小紅':90,'小剛':100,'小美':85},
'第二組':{'小強':99,'小蘭':89,'小偉':93,'小芳':88}
}
print(scores['第二組']['小芳']) #先找到字典的鍵,再找出要取出的值對應的鍵
88
總結:最外層是什么就是什么嵌套,提取多級嵌套的列表/字典時,要一層一層地取出來
任意嵌套的列子
students = {
'第一組':['小明','小紅','小剛','小美'],
'第二組':['小強','小蘭','小偉','小芳']
}
scores = [
{'小明':95,'小紅':90,'小剛':100,'小美':85},
{'小強':99,'小蘭':89,'小偉':93,'小芳':88}
]
print(students['第一組'][2])
小剛
print(scores[0]['小剛'])
100
##########################
元組tuple
小括號來包的
元組和列表都是序列,提取的方式也是偏移量
支持任意的嵌套
tuple1 = ('A','B')
list2 = (('A','B'),('C','D'),('E','F'))
print(tuple1[0])
A
print(list2[1][1])
D
*取出 反面角色 狼 *
townee = [
{'海底王國':['小美人魚''海之王''小美人魚的祖母''五位姐姐'],'上層世界':['王子','鄰國公主']},
'丑小鴨','堅定的錫兵','睡美人','青蛙王子',
[{'主角':'小紅帽','配角1':'外婆','配角2':'獵人'},{'反面角色':'狼'}]
]
print(townee[5][1]['反面角色'])
狼
##################################################
# 知識1:一種新的列表生成方式
num1 = [1,2,3,4,5] # 想一想,如果用這個方法生成一個1-100的列表……
num2 = list(range(1,6))
print(num1)
print(num2)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
# 知識2:extend 的新用法
num2.extend(['ABCDE'])
num2.extend('ABCDE') # extend后面是列表的話會將其合並,后面是字符串的話會將每個字符當成一個列表中的元素。
print(num2)
[1, 2, 3, 4, 5, 'ABCDE', 'A', 'B', 'C', 'D', 'E']
# 知識點3:列表生成式
list1 = [i for i in range(3)] # 規定列表中元素的范圍
print(list1)
[0, 1, 2]
list2 = [m+n for m in ['天字', '地字'] for n in '一二'] # 列表元素可以是組合,分別規定范圍。
print(list2)
['天字一', '天字二', '地字一', '地字二']
list3 = [n*n for n in range(1,11) if n % 3 == 0] # 元素既可規定范圍,也可附加條件。
print(list3)
[9, 36, 81]
# 假設用普通的方法來生成上面的列表:
'''
list1 = []
for i in range(3):
list1.append(i)
print(list1)
list2 = []
for m in ['天字', '地字']:
for n in '一二':
list2.append(m+n)
print(list2)
list3 = []
for i in range(1,11):
if i % 3 == 0:
list3.append(i*i)
print(list3)
'''