Python中的各种表达式

列表表达式

列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形

其基本格式如下:

[Expression for Variable in  list]
也就是:[ 表达式  for  变量 in 列表]
如果需要加入if条件语句则是:[表达式 for 变量 in 列表 if 条件] 

#生成一个新列表,列表的每个元素都是li的每个元素的平方

li = [5,6,7] li2 = [i*i for i in li] 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 in l]
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 in dic}
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 in dic}
print(res)
View Code

 

集合表达式

1. 一行代码实现删除列表中重复的值。

li = [1, 1, 2, 2, 3, 3, 4, 5, 6, 6]
print({i for i in li})
View Code

 

posted @ 2017-09-10 16:30  流星之泪  阅读(1761)  评论(0)    收藏  举报