列表表达式
列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形
其基本格式如下:
[Expression for Variable in list]
也就是:[ 表达式 for 变量 in 列表]
如果需要加入if条件语句则是:[表达式 for 变量 in 列表 if 条件]
#生成一个新列表,列表的每个元素都是li的每个元素的平方
li = [5,6,7]
li2= [i*i for i inli]
print(li2)
# 生成一个新列表
li = [i/2 for i in range(0,7,2)]
print(li)
# 将names中含有2个e的元素追加到neame_li中。
names =[
['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']
]
name_li= [name for li in names for name in li if name.count('e') == 2]print(name_li)
l = [{'name':'alex'},{'name':'egon'},{'name':'yuan'}]
l2= [i['name'].capitalize() if i['name'] == 'alex' else i['name'] for i inl]print(l2)
#将列表长度小于3的字符串过滤掉,并将剩下的转换成大写字母
name = ['Python', 'C', 'C#', 'Java', 'Go', 'php']
res= [i.upper() for i in name if len(i) >= 3]print(res)
生成器表达式
生成器表达式并不真正的创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目"产生"(yield)出来。生成器表达式使用了"惰性计算"或称作"延时求值"的机制。
序列过长,并且每次只需要获取一个元素时,应该考虑生成器表达式而不是列表解析。
语法:
(expression for iter_val in iterable)
(expression for iter_val in iterable if cond_expr)
gen = ('egg%d'%i for i in range(1,11))for i in gen:print(i)
字典表达式
1. 将字典的key和value对调。
dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
res= {dic[k]: k for k indic}print(res)
View Code
2. 将大小写对应的value值相加,将key统一成小写
dic = {'a': 26, 'A': 18, 'b': 6, 'c': 17, 'B': 52}
res= {k.lower(): dic.get(k.lower(), 0) + dic.get(k.upper(), 0) for k indic}print(res)
View Code
集合表达式
1. 一行代码实现删除列表中重复的值。
li = [1, 1, 2, 2, 3, 3, 4, 5, 6, 6]print({i for i in li})
View Code