day6 -元組和字典
一、清單相關函數和方法
1.清單(序列)相關函數:max、min、sum、len、sored、reversed、list
1)max(序列) - 擷取序列中最大的元素(序列中的元素本身必須支援比較運算,并且元素之間可以比較大小)
nums = [89, 23, 45, 890, 82, 12, 40]
print(max(nums)) # 890
2)min(序列) - 擷取序列中最小的元素
nums = [89, 23, 45, 890, 82, 12, 40]
print(min(nums))
3)sum(序列) - 求序列中所有元素的和(序列中的元素必須是數字)
nums = [89, 23, 45, 890, 82, 12, 40]
print(sum(nums)) # 1181
print(sum(range(1, 101)))
4)len(序列) - 求序列中元素的個數
5)sorted(序列) - 将序列中的元素從小到大排序,傳回一個排完序以後的新清單
sorted(序列, reverse=True) - 将序列中的元素從大到小排序,傳回一個排序以後的新清單
nums = [89, 23, 45, 890, 82, 12, 40]
new_nums = sorted(nums)
print(nums, new_nums)
new_nums = sorted(nums, reverse=True)
print(nums, new_nums)
6)reversed(序列) - 将序列中的元素倒序,産生一個新的疊代器
nums = [89, 23, 45, 890, 82, 12, 40]
new_nums = reversed(nums)
print(nums, new_nums) # <list_reverseiterator object at 0x0000000001E07970>
for x in new_nums:
print(x)
# 切片倒序
print(nums[::-1])
7)list(序列) - 将其它将序列轉換成清單
rint(int(2.9), int(True), int(False), int('345'), float('3e4'))
print(list('abc'))
print(list(range(1, 3)))
print(list(new_nums))
2.清單的相關方法
1)清單.clear() - 清空清單
names = ['羅小黑戰記', '海賊王', '一人之下', '進擊的巨人', '死亡筆記']
names.clear()
print(names)
2)清單.copy() - 複制原清單産生一個一模一樣的清單
names = ['羅小黑戰記', '海賊王', '一人之下', '進擊的巨人', '死亡筆記']
names2 = names
new_names = names.copy()
print(new_names)
print(id(names), id(names2), id(new_names))
3)清單.count(元素) - 統計指定元素在清單中出現的次數
names = ['羅小黑戰記', '海賊王', '一人之下', '進擊的巨人', '死亡筆記', '海賊王', '海賊王']
print(names.count('死亡筆記')) # 1
print(names.count('死神')) # 0
print(names.count('海賊王')) # 3
4)清單.extend(序列) - 将序列中所有的元素都添加到清單中
names = ['羅小黑戰記', '海賊王', '一人之下', '進擊的巨人', '死亡筆記']
names.extend(['妖精的尾巴', '火影忍者'])
print(names) # ['羅小黑戰記', '海賊王', '一人之下', '進擊的巨人', '死亡筆記', '妖精的尾巴', '火影忍者']
names.extend('123')
print(names)
names.extend(range(3))
print(names)
5)清單.index(元素) - 擷取指定元素對應的下标(從0開始的下标)
names = ['羅小黑戰記', '海賊王', '一人之下', '進擊的巨人', '死亡筆記', '海賊王']
print(names.index('一人之下'))
# print(names.index('火影忍者'))
print(names.index('海賊王'))
6)清單.reverse() - 将清單倒序(不會産生新的清單)
names = ['羅小黑戰記', '海賊王', '一人之下', '進擊的巨人', '死亡筆記', '海賊王']
names.reverse()
print(names)
7)清單.sort() - 将清單中的元素從小到大排序
nums = [78, 60, 67, 90, 56]
nums.sort()
print(nums)
二、清單推導式(重要)
清單推導式 - 用來建立清單的表達式
推導式的應用:建立清單、元素篩選、元素的變換
1.推導式通用格式1
[表達式 for 變量 in 序列]
建立清單的原理:
list1 = []
for 變量 in 序列:
list1.append(表達式)
list1 = [x for x in range(4)]
print(list1)
list2 = [2*x + 3 for x in range(4)]
print(list2)
list3 = [x*2 for x in 'abc']
print(list3)
# 練習:已知清單scores = [89, 34, 56, 23, 90, 100],将清單中的乘積轉換成十分制的值
scores = [89, 34, 56, 23, 90, 100]
list1 = [x/10 for x in scores]
print(list1)
2.補充:三目運算符
1)C的三目運算符:
表達式1?表達式2:表達式3 -> 如果表達式1的值為0,整個運算表達式的結果是表達式3
否則整個表達式的值是表達式2
2)Python的三目運算符:
變量 = 表達式2 if 表達式1 else 表達式3
age = 17
result = '成年' if age >= 18 else '未成年'
print(result)
# 練習:scores = [89, 34, 56, 23, 90, 100],将清單中的乘積轉換成及格,不及格
scores = [89, 34, 56, 23, 90, 100]
list1 = ['及格' if x >= 60 else '不及格' for x in scores]
print(list1)
3.推導式通用格式2
[表達式 for 變量 in 序列 if 條件語句]
原理:
list1 = []
for 變量 in 序列:
if 條件語句:
list1.append(表達式)
nums = [23, 89, 98, 67, 23, 44, 60]
new_nums = [x for x in nums if x % 2 == 1]
print(new_nums)
# 練習:删除清單中所有的空值和0值
# list1 = [12, 'abc', True, 0, 0.00, 0.02, '', [], [1, 2]]
# -> [12, 'abc', True, 0.02, [1, 2]]
list1 = [12, 'abc', True, 0, 0.00, 0.02, '', [], [1, 2]]
new_list1 = [x for x in list1 if x]
print(new_list1)
三、推導式整理
1.整體變換 - 将原序列中的元素通過統一的規則轉換成一個新的序列
方案:[表達式 for 變量 in 序列] -表達式用來描述新序列中的元素和原序列元素之間的規則
nums = [23, 789, 90, 67, 22, 31]
result = [x % 10 for x in nums]
print(result)
2.部分變換(按照兩種不同的方式變換)
方案:[三目運算 for 變量 in 序列]
list1 = [23, 'abc', 78, '234', 1.23, [10, 30]]
# [230, 'abc' ,780, '234', 12.3, [10, 30]
result = [x * 10 if type(x) in [int, float] else x for x in list1]
print(result)
3…篩選、删除
方案:[表達式 for 變量 in 序列 if 條件語句]
scores = [89, 33, 67, 8, 98, 23, 66, 81]
result = [x for x in scores if x >= 60]
print(result)
四、元組
1.什麼是元組
元組是容器型資料類型(序列),将()作為容器标志,裡面多個元素用逗号隔開:(元素1, 元素2, 元素3)
元組是不可變的(不支援增删改)、元組是有序(支援下标操作)
任何類型的資料都可以作為元組的元素
1)空元組
t1 = ()
print(t1, type(t1), len(t1))
2)隻有一個元素的元組:元素後面的逗号不能省
l1 = [100]
t1 = (100,)
print(t1, type(t1)) # (100,) <class 'tuple'>
t2 = (100)
print(t2, type(t2)) # 100 <class 'int'>
3)普通元組
t4 = (10, 12.9, 'abc', 10)
print(t4, type(t4))
2.元組就是不可變的清單
清單中凡是和增删改不相關的操作,元組都支援
1)查
t5 = ('肖申克的救贖', '阿甘正傳', '霸王别姬', '美麗人生', '黑客帝國', '觸不可及', '這個殺手不太冷', 'V字仇殺隊')
print(t5[1])
print(t5[-1])
print(t5[1:]) # ()
print(t5[2:-2:2])
for x in t5:
print('x:', x)
for index in range(len(t5)):
print(index,t5[index])
2)+ 、 * 、in、not in
t6 = (10, 20)
print(t6 + (100, 200))
print(t6 * 3)
print(1 in t6)
print(10 in t6)
3) max、min、sum、sorted、reversed、len、tuple
scores = (98, 78, 67, 56, 23, 45, 99, 82, 86, 99)
print(max(scores))
print(min(scores))
print(sum(scores))
print(sorted(scores)) # [23, 45, 56, 67, 78, 82, 86, 98, 99]
print(tuple('abc'))
print(tuple([10, 230, 4]))
4)相關方法:count、index
print(scores.count(99))
print(scores.index(56))
3.元組不隻是不可變清單
1)元組的()在沒有歧義的情況下可以去掉(元組特有的)
t1 = 10, 20, 30
print(t1, type(t1))
t2 = 10, 20, 30 * 2
print(t2)
2) 擷取元組元素:讓變量個數和元組中元素個數一緻 (清單和元組都支援)
point1 = (10, 98)
print(point1[0], point1[1])
x, y = point1
print(x, y)
point2 = (-19, 89, 29)
x, y, z = point2
print(x, y, z)
point1 = [10, 98]
x, y = point1
print(x, y)
3)擷取元組元素: 讓變量個數小于元組中元素的個數,但必須在某一個變量前加* (清單和元組都支援)
先讓不帶的變量按照位置去擷取元組中的元素,然後讓剩下的元素全部作為一個清單傳回給帶的變量
t2 = (100, 200, 'abc', '男', True, 300) # 清單也适用
x, *y, z = t2
print(x, z)
print(y)
*x, y, z = t2
print(y, z)
print(x)
x, y, *z = t2
print(x, y)
print(z)