python技巧8:列表、集合及字典推导式

列表推导式是Python最受喜爱的特性之⼀。它允许⽤户⽅便的从⼀个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。

形式:

[expr for val in collection	if condition]

等价于:

result=[]
for val in collection:
	if condition:
		result.append(expr)

例如:

strings	=['a',	'as',	'bat',	'car',	'dove']
a=[x.upper() for x in strings if len(x)>2]
print(a)

执行结果:

['BAT', 'CAR', 'DOVE']

同理可以推导出字典和集合的推导式:

字典:

{key-expr:value-expr for value in collection if condition}

集合:

{expr for value in collection if condition}

要注意的是,在推导式中if condition可以看做一个过滤器,下面用一个集合推导式演示一下没有过滤器的情形。

strings=['a',	'as',	'bat',	'car',	'dove']
a={len(x) for x in strings}
print(a)

执行结果

{1,2,3,4}

这里可以用map函数达到相同效果:

a=set(map(len,strings))
print(a)

字典推导式的例子:

strings=['a',	'as',	'bat',	'car',	'dove']
loc_mapping = {val : index for index, val in enumerate(strings)}
print(loc_mapping)

执行结果:

{'a': 0, 'as': 1, 'bat': 2, 'car': 3, 'dove': 4}

p.s. enumerate()请查看python函数部分文章

嵌套列表推导式:
形式:

[x for y in collection for x in y if condition]

等价于:

result=[]
for y in collection:
	for x in y:
		if confition:
			result.append(x)

看一个例子:

all_data = [['John', 'Emily', 'Michael', 'Mary', 'Steven'],
            ['Maria', 'Juan', 'Javier', 'Natalia', 'Pilar']]
result = [name for names in all_data for name in names
          if name.count('e') >= 2]
print(result)

等价于:

result=[]
for names in all_data:
    for name in names:
        if name.count('e')>=2:
            result.append(name)
print(result)

执行结果:

['Steven']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值