文章目录
1. 列表、字典和集合推导式
- 列表推导
后面接的if操作是可选项。
lst = [i * i for i in range(1,10) if i%2==0] #生成一个新列表
print(lst) # [4, 16, 36, 64]
同理字典推导式和集合推导式也可以if选项。
- 字典推导
# 字典推导式1:
items = ["Fruits","Books","Othes"]
prices=[23,45,73,56,78]
dic = {item:price for item,price in zip(items,prices)} # {'Fruits': 23, 'Books': 45, 'Othes': 73}
print(dic)
# 字典推导式2:
testDict= {i: i *i for i in range(10)}
print(testDict) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
- 集合推导
s= {i * i for i in range(1,10)}
print(s)
输出:
{64, 1, 4, 36, 9, 16, 49, 81, 25}
- 条件推导式
#去除None和{}
infos = [{1:2}, None, {}, {3:4, 5:6}]
# 条件推导式方法一:
infos = [info for info in infos if info != None and len(info) != 0]
# 条件推导式二:一定要加else
infos = [info if (info != None and len(info) != 0) else info for info in infos]
print(infos) #[{1: 2}, {3: 4, 5: 6}]
- 多层推导式
vec = [[1,2,3],[4,5,6],[7,8,9]]
list = [num for elem in vec for num in elem]
print(list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
2. while…else和for…else
当while和for条件正常结束后,将会执行else操作,如果是使用break强制跳出,则不会执行else
。
- 正常结束
while举例:
item = 0
while item < 3:
item+=1
print(item)
else:
print("正常结束!")
for举例:
lst = [1,2,3]
for item in lst:
print(item)
else:
print("正常结束!")
以上两个都输出:
1
2
3
正常结束!
- 非正常结束
while举例:
item = 0
while item < 3:
item += 1
print(item)
if item == 2:
break
else:
print("正常结束!")
for举例:
lst = [1,2,3]
for item in lst:
print(item)
if item == 2:
break
else:
print("正常结束!")
以上两个都输出:
1
2
3. 原地交换多个数值
x,y,z= 10,20,30
print(x,y,z) # 10 20 30
x,y,z= y,z,x
print(x,y,z) # 20 30 10
4. 使用in操作简化if
if m in [1,3,5,7]:
等价于:
if m==1 or m==3 or m==5 or m==7:
5. 内置sort函数与序列的sort方法
- list的内置排序sort:不改变地址,
在原列表基础上排序
。 - 函数sorted:会生成新的列表,原列表不变。
lst = [9,2,5,6,8]
# 内建函数方法:
print(sorted(lst)) # [2, 5, 6, 8, 9]
print(lst) # [9, 2, 5, 6, 8]
# 列表方法:
lst.sort()
print(lst) # [2, 5, 6, 8, 9]
6. 将列表存储至新变量中
这种方式,元素个数与列表长度应该严格相同,不然会报错
。
lst= [1,2,3]
x,y,z= lst
print(x,y,z)
输出:
1 2 3
7. 三元运算符
ans = 3 if 1 > 2 else 4 #if语句为true输出自己,否则输出else
print(ans) # 4
8. 找到列表中数字最多的元素
test= [1,2,3,4,2,2,3,1,4,4,4,4]
print(max(set(test),key=test.count))
输出:
4
9. 比较连接
ans = 3
if 4 < ans >2:
print(ans)
else:
print("else")
输出:
else
10. 巧用zip命令
(1)遍历两个列表
lst_1 = ["11", "22"]
lst_2 = ["33", "44"]
for a, b in zip(lst_1, lst_2):
print(a + " && " + b)
输出:
11 && 33
22 && 44
(2)使用zip对多个列表排序
names = ['John', 'Amy', 'Jack']
scores = [98, 100, 85] # 分数和名字是一一对应的
#按照names排序
data = list(zip(names, scores))
data.sort()
print(data) # [('Amy', 100), ('Jack', 85), ('John', 98)] ,names和scores列表不会发生改变
#按照分数进行排序
data = list(zip(scores, names))
data.sort()
print(data) # [(85, 'Jack'), (98, 'John'), (100, 'Amy')],names和scores列表不会发生改变
(3)使用两个序列构建一个字典
t1= (1,2,3)
t2= (10,20,30)
dic = dict(zip(t1,t2))
print(dic)
输出:
{1: 10, 2: 20, 3: 30}
11. 带索引的遍历列表
teams = [1,2,3,4]
for index, team in enumerate(teams):
print(index, team)
输出:
0 1
1 2
2 3
3 4
12. 初始化列表的多个值
lst = [1]*3
print(lst)
输出:
[1, 1, 1]
13. 快速翻转列表
lst = [1,2,3,4,5]
# 反转方式1:
lst = lst[::-1]
print(lst) # [5, 4, 3, 2, 1]
# 反转方式2:内置函数
lst.reverse()
print(lst) # [1, 2, 3, 4, 5]
# 反转方法3:列表方法
#reversed出来的结果是反向的迭代器
lst1 = reversed(lst)
print(type(lst1)) # <class 'list_reverseiterator'>
lst = list(lst1) #内置方法不会影响原始值,所以要进行赋值操作
print(lst) # [5, 4, 3, 2, 1]
14. 使用字典存储选择操作
my_dict = {
'sum':lambda x,y:x+y,
'subtract':lambda x,y:x-y
}
print(my_dict['sum'](9,3)) # 12
print(my_dict['subtract'](9,3)) # 6
15. 统计数据个数方法
(1)字典统计方法
data = [1,4,5,6,7,4,334,5,23,1,3,4,4]
# 列表中出现数字出现的次数
d = dict.fromkeys(data, 0) #构建字典,键为:data,值为0
print(d) # {1: 0, 4: 0, 5: 0, 6: 0, 7: 0, 334: 0, 23: 0, 3: 0}
for v in data:
d[v] += 1
print(d) # {1: 2, 4: 4, 5: 2, 6: 1, 7: 1, 334: 1, 23: 1, 3: 1}
(2)使用collections中的Counter进行计数
from collections import Counter
c = Counter('hello world')
dic = dict(c)
print(c)
print(dic)
#统计出现频率最高的前n个数
print(c.most_common(2)) # [('l', 3), ('o', 2)]
输出:
Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
{'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
[('l', 3), ('o', 2)]
16. 访问字典的元素操作
data = {'user': 1, 'name': 'Max', 'three': 4}
# 字典可以通过[]进行赋新值,但是不能访问没有的键值对
data['admin'] = data.get('admin', 6) + 4
print(data['admin']) # 10
#不可以访问没有的元素
print(data['new']) #不可以, 报错!!!