推导式
推导式是用来快速方便的产生列表或者字典的表达式
1.列表推导式
1) 基本结构
[表达式 for 变量 in 序列]
产生一个新的列表,列表中的元素就是每次循环对应的表达式的结果
相当于:
列表 = []
for 变量 in 序列:
列表.append(表达式)
list1 = [10 for x in range(3)]
print(list1) # [10, 10, 10]
list2 = [2*x for x in range(1, 4)]
print(list2) # [2, 4, 6]
list3 = [3*x for x in range(0, 34)]
list4 = ['str%s' % x for x in list3]
print(list4)
2) 条件结构
列表 = [表达式 for 变量 in 序列 if 条件语句]
相当于:
列表 = []
for 变量 in 序列:
if 条件语句:
列表.append(表达式)
list5 = [f'str{x}' for x in range(1, 100) if x == 1 or x % 3 == 0]
print(list5)
list6 = ['str1' if x == 0 else f'str{x}' for x in range(0, 100, 3)]
print(list6)
多重循环结构1:
列表 = [表达式 for 变量1 in 序列1 for 变量2 in 序列2]
相当于:
列表 = []
for 变量1 in 序列1:
for 变量2 in 序列2:
列表.append(表达式)
多重循环结构2:
列表 = [表达式 for 变量1 in 序列1 for 变量2 in 序列2 if 条件语句]
相当于:
列表 = []
for 变量1 in 序列1:
for 变量2 in 序列2:
if 条件语句:
列表.append(表达式)
list7 = [f'{x}{y}' for x in range(3) for y in 'abc']
print(list7) # ['0a', '0b', '0c', '1a', '1b', '1c', '2a', '2b', '2c']
2.集合推导式
将列表推导式的[]变成{}
a1 = {x for x in 'hello'}
print(a1) # {'o', 'h', 'e', 'l'}
3.元组和集合推导式
元组 - 将列表推导式的[]变成tuple()
字典 - (表达式是键值对形式)将列表推导式的[]变成{}; (表达式有且只有两个元素的序列的时候)将列表推导式的[]变成dict()
a2 = tuple(x*2 for x in 'hello')
print(a2) # ('hh', 'ee', 'll', 'll', 'oo')
a3 = {x: x*2 for x in 'hello'}
print(a3) # {'h': 'hh', 'e': 'ee', 'l': 'll', 'o': 'oo'}
a4 = dict((x, x*2) for x in 'hello')
print(a4) # {'h': 'hh', 'e': 'ee', 'l': 'll', 'o': 'oo'}
dic = {'a': 10, 'b': 20, 'c': 30}
dic1 = dict((dic.get(x), x) for x in dic)
print(dic1)