Python 生成式

列表生成式-集合生成式-字典生成式

一个不注意小事情的人,永远不会成功大事业 — 卡耐基

列表生成式的写法

  • 语法

[对项的操作 forin 可迭代对象]

首先,这句代码的阅读顺序是 for 项 in 可迭代对象 -> 对项的操作.其次外围的方括号([])表明这是列表生成式,最终的结果是一个列表

for 项 in 可迭代对象这部分和 for 循环很相似, 通过迭代可迭代对象,每次取出一个项.对于取出的项,我们可以对它做一些处理,也就是表达式中的对项的操作部分.可迭代对象中的所有项都会被迭代和处理,并收集起来形成一个新的列表

  • 举例子

result = [content.upper() for content in ['a', 'b', 'c', 'd']]
print(result)

# 结果

# ['A','B','C','D']

列表生成式中使用 if

在列表生成式中的,每次迭代的项是可以被筛选过滤的,使用 if 关键字


[对项的操作 forin 可迭代对象 if 对项的判断]

它的阅读顺序是: for 项 in 可迭代对象->if 对项的判断->对项的操作

每次迭代出来的项 要先经过对项的判断 如果未 True 才会由 对项的操作处理

如果对项的判断为 False 后续对项的操作会被跳过,最终列表的长度也会减少

  • 举个例子

result = [2**i for i in range(1, 11) if i % 2 == 1]
print(result)

# 结果
# [2, 8, 32, 128, 512]
  • 阅读顺序

# for e in range(1,11)
# if e %2 == 1
# 2**e

列表生成式中嵌套 for(了解就好)

  • 列表生成式中的 for 中还可以在嵌套 for。

# [对项1和(或)项2的操作 for 项1 in 可迭代对象1 for 项2 in 可迭代对象2]
  • 举例

nums = [1, 2, 3]
chars = ['a', 'b', 'c']
arr = [c * n for n in nums for c in chars]

print(arr)

# [‘a’, ‘b’, ‘c’, ‘aa’, ‘bb’, ‘cc’, ‘aaa’, ‘bbb’, ‘ccc’]

字典生成式

字典生成式的语法


{:forin 可迭代对象}

和列表生成式非常相似,不同之处在于它使用的是({})另外还使用键:值形式

举个例子,有字符串’abcde’,以每个小写字母作为键,对应大写字母作为值得来构造字典


{char: char.upper() for char in 'abcde'}
  • 例子

{char: char.upper() for char in ‘abcde’}

# 结果

# {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E'}

集合表达式

  • 想要通过已有得可迭代对象来构造集合,可使用结合生成式

语法操作


{对项得操作 forin 可迭代对象}

实例


{char.lower() for char in 'ABCDABCD'}

# 结果 {'a','b','d','c'}

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录