推导式 : 英文 comprehension
支持推导式的有列表list 字典dict 集合set 注意元组没有 推导式,如果你那样去写,他会变成一个generator生成器对象
推导式会让代码更加简洁,易懂,更加pythonic
列表:
[ expression for ..... if ..... ] #生成了一个列表对象
其中:expression 是加入到列表中的元素的表达式 , 后面的for if 则是对这个表达式进行重复和筛选的语句
#!/usr/bin/env python3
#coding:utf-8
li1 = [1 for i in range(5)]
print(li1) #[1, 1, 1, 1, 1]
li2 = [i for i in range(1,11) if i%2==0]
print(li2) #[2, 4, 6, 8, 10]
li3 = [char.upper() for char in 'hello']
print(li3) #['H', 'E', 'L', 'L', 'O']
li4 = [i*i for i in range(10)]
print(li4) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
li5 = [(m,n) for m in [1,2,3] for n in "abc"]
print(li5)
#[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
集合的推导式和列表一样,只不过集合或过滤掉重复 的元素
字典:
#!/usr/bin/env python3
#coding:utf-8
s = 'hello'
#字符串中每个字符出现的次数 char : times
d1 = {char:s.count(char) for char in s }
print(d1)
#这个字典在生成的时候发生了键的覆盖:'hello' 中'l' 出现了2次
#改进:
d2 = {char:s.count(char) for char in set(s)}
print(d2)