生成式的语法结构为:
expression for item1 in iterable1 if condition1
列表生成式
需求:
将下列列表的每个元素后面都加上'你好'字样.
name_list = ['yietong', 'lily', 'tom', 'susan', 'mat']
普通方法:使用列表添加元素的方式可以实现此需求,
name_list = ['yietong', 'lily', 'tom', 'susan', 'mat']
# 定义一个空列表,将每个元素加上你好后缀进行for循环,然后添加到空列表里
new_list = []
for name in name_list:
res = name + '_你好'
new_list.append(res)
print(new_list)
# ['yietong_你好', 'lily_你好', 'tom_你好', 'susan_你好', 'mat_你好']
但是 我们可以寻求更为简便的方法
name_list = ['yietong', 'lily', 'tom', 'susan', 'mat']
new_list = [name + '_你好' for name in name_list]
print(new_list)
# ['yietong_你好', 'lily_你好', 'tom_你好', 'susan_你好', 'mat_你好']
生成式还可以进行条件筛选
name_list = ['yietong', 'lily', 'tom', 'susan', 'mat']
new_list = [name + '_你好' for name in name_list if name == 'yietong']
print(new_list) # ['yietong_你好']
需要注意的是: 在此生成式中, if 不可以与else连用. 因为for也可以和else进行连用, 以免造成歧义.
字典生成式
需求: 将两个列表生成字典
l1 = ['name','age','gender'] l2 = ['yietong', 22, 'female']
l1 = ['name','age','gender']
l2 = ['yietong', 22, 'female']
# 需求: 将两个列表生成字典
for i in l1,l2:
print(i)
# ['name', 'age', 'gender']
# ['yietong', 22, 'female']
dict = {}
for i in range(len(l1)):
new_dict = {l1[i]:l2[i]}
print(new_dict)
# {'name': 'yietong'}
# {'age': 22}
# {'gender': 'female'}
先定义了一个空字典,通过索引的方式进行键值对匹配.
我们也可以通过字典生成式的方法来达到此目的,并且代码也简化了.
l1 = ['name','age','gender']
l2 = ['yietong', 22, 'female']
res = {l1[i]:l2[i] for i in range(len(l1))}
print(res) # {'name': 'yietong', 'age': 22, 'gender': 'female'}
此表达式也可进行条件筛选
l1 = ['name','age','gender']
l2 = ['yietong', 22, 'female']
res = {l1[i]: l2[i] for i in range(len(l1)) if i == 1}
print(res) # {'age': 22}
需要注意的是: 在此生成式中, if 不可以与else连用. 因为for也可以和else进行连用, 以免造成歧义.
集合生成式
res = {i for i in range(10)}
print(res, type(res))
res = {i for i in range(10) if i != 2}
print(res, type(res))
# {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class 'set'>
# {0, 1, 3, 4, 5, 6, 7, 8, 9} <class 'set'>
s = set() 空集合需要用关键字声明
d = {} 默认为字典
"""没有元组生成式 """