列表生成式-集合生成式-字典生成式
一个不注意小事情的人,永远不会成功大事业 — 卡耐基
列表生成式的写法
- 语法
[对项的操作 for 项 in 可迭代对象]
首先,这句代码的阅读顺序是 for 项 in 可迭代对象 -> 对项的操作.其次外围的方括号([])表明这是列表生成式,最终的结果是一个列表
for 项 in 可迭代对象这部分和 for 循环很相似, 通过迭代可迭代对象,每次取出一个项.对于取出的项,我们可以对它做一些处理,也就是表达式中的对项的操作部分.可迭代对象中的所有项都会被迭代和处理,并收集起来形成一个新的列表
- 举例子
result = [content.upper() for content in ['a', 'b', 'c', 'd']]
print(result)
# 结果
# ['A','B','C','D']
列表生成式中使用 if
在列表生成式中的,每次迭代的项是可以被筛选过滤的,使用 if 关键字
[对项的操作 for 项 in 可迭代对象 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’]
字典生成式
字典生成式的语法
{键:值 for 项 in 可迭代对象}
和列表生成式非常相似,不同之处在于它使用的是({})另外还使用键:值形式
举个例子,有字符串’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'}
集合表达式
- 想要通过已有得可迭代对象来构造集合,可使用结合生成式
语法操作
{对项得操作 for 项 in 可迭代对象}
实例
{char.lower() for char in 'ABCDABCD'}
# 结果 {'a','b','d','c'}