python --- 列表生成式,字典生成式,集合生成式

生成式的语法结构为:

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 = {} 默认为字典

"""没有元组生成式 """

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值