当前位置: 代码迷 >> 综合 >> day9-推导式
  详细解决方案

day9-推导式

热度:93   发布时间:2024-02-26 23:50:31.0

推导式

推导式是用来快速方便的产生列表或者字典的表达式

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)