自学python_13 列表/集合/字典推导式

列表推导式:

格式:一个表达式 for 变量 in [旧列表]
或者 [表达式 for 变量 in 旧列表 if 条件]

names = ["adsdsad","bbabasss","asdasdas","1wqewee","sad","21d"]
result = [name.capitalize() for name in names if len(name) > 3]
print(result)
# ['Adsdsad', 'Bbabasss', 'Asdasdas', '1wqewee']

这样写可以起到化简的作用。可以这样理解,name是待放进新列表的元素,用for循环遍历旧列表,如果遍历的符合if后面的条件,就把它放入列表中,也可以先对name进行操作再放入列表中,例如上面代码中,name.capitalize(),就是将name转换成大写之后再放入列表中。

再举一个例子:

newlist = [i for i in range(1,101) if i % 3 == 0]
print(newlist)
# [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 
# 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66,
#  69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

打印 0 ~ 5 和 0 ~ 10 的奇数,构成的列表。
就是[(0,1),(0,3),(0,5),(0,7),(0,9),(2,1),(2.3) … …]

newlist = [(x,y) for x in range(5) if x % 2 == 0 for y in range(10) if y % 2 != 0]
print(newlist)
# [(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9)]

实现这个功能的时候用了两层for循环,这里的for循环相当于嵌套于 if 中的,这里的if不是必须的,如果不加if的话就没有判断直接执行后面的语句,一定要注意语法格式,这里的语法格式有点乱。

利用 if else 对筛选的结果进行更改的列表推导式。

dict1 = {"name":"tom","salary":5000}
dict2 = {"name":"lucy","salary":5000}
dict3 = {"name":"jack","salary":4500}
dict4 = {"name":"lily","salary":3000}
list1 = [dict1,dict2,dict3,dict4]
# 如果薪资大于5000加200,低于5000加500。
newlist = [employee["salary"] + 200 if employee["salary"] > 5000 else employee["salary"] + 500 for employee in list1]
print(newlist)
# 上面的代码可以参考三目运算符来理解,满足if后执行的语句 if else 满足else执行的语句。
# employee["salary"] + 200 if employee["salary"] > 5000 else employee["salary"] + 500 这个可以看成一个整体,作为判断条件。
# newlist里的是employee["salary"] + 钱数,所以列表中全部都是钱数。
# [5500, 5500, 5000, 3500]

集合推导式

list1 = [1,2,3,4,2,6,7,3,7,8,2,3]
set1 = {x if x > 2 else x + 100 for x in list1}
print(set1)
# {3, 4, 101, 102, 6, 7, 8}

集合推导式和列表推导式的语法是一样的,只是结果满足集合的特性,并且顺序变了,但是没影响。因为集合具有无序性。

字典推导式

dict1 = {1:'a',2:'b',3:'c',4:'c'}
dict2 = {value:key for key,value in dict1.items()}
print(dict2)
# {'a': 1, 'b': 2, 'c': 4}

字典推导式和集合推导式一样,用大括号包在外面,所以为了区分使用时必须要 key:value 作为返回的类型,这里我把key和value在结果中换了一下位置,这样dict1中的 3:‘c’ 和 4:‘c’ 会变成 ‘c’:3,‘c’:4 ,我们可以观察到结果中只保留了’c’:4。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值