Python容器类型的过滤和解析技巧

前言

原博文:https://blog.csdn.net/wingforlearn/article/details/90272146

讲述了诸多python技巧,我才读少许就觉得对我这个python小白代码的优化受益匪浅。

美中不足的是只有代码,而且是python2的,其中有些语法需要相应自己转换到python3的版本,并且代码的具体意义需要自己花功夫去理解,但理解了之后你就会和我一样感叹这些技巧的精妙。

这篇博文只挑出其中有关于容器类型的解析和过滤技巧,主要是怕自己忘(所以写下来的也是我自己懂就好了)。

列表解析

# 列表解析
from random import randint

data = [randint(-10, 10) for i in range(12)]
filter(lambda x: x >= 0, data) 

代码的功能是随机生成12个数,每个数都在(-10,10)之间,并且将这12个数放入data列表。再筛选出其中大于等于0的元素,将这些元素以迭代器对象的形式返回。

首先是从random库中载入了一个randint的方法,它是用来生成随机整数的,并且你可以定这个随机整数的生成范围。然后构造了一个列表,这个列表有十二个元素,每个元素都在(-10,10)之间随机生成,生成完毕后装入列表,装满12个元素后,这个列表赋值给data。

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

值得注意的是,这里的返回的迭代器对象,不能直接输出,需要用到for循环。

如要直接输出,用list转换后再输出。

a=list(filter(lambda x: x >= 0, data)) #转为列表就可以直接输出了。

字典解析

#字典解析
d = {x: randint(60, 100) for x in range(10)}

d_new={k: v for k, v in d.items() if v > 90} #这是一个字典

代码的功能是:生成10个key:value形式的元素,每个元素中由x充当key,每个key对应的value则从(60,100)中随机生成,并将这十个元素放入字典d。随后过滤出所有value>90的元素,并将其所在的元素(key:value形式)装入字典d_new。

集合解析

# 集合解析
data = [randint(-10, 10) for i in range(12)]
s = set(data)
s_new={x for x in s if x % 3 == 0}

代码的功能是:随机生成12个数,每个数都在(-10,10)之间,并且将这12个数放入data列表。再将data列表强转成集合s。最后从集合s中挑选出可以整除3的元素放入新的集合s_new。

#值得注意的是,列表形式的构造可以使用以下方法
a=[randint(-10, 10) for i in range(12)] #构造完毕后这是一个列表
type(a)='list'


#而集合形式
a=[randint(-10, 10) for i in range(12)] #构造完毕后这是一个迭代器
type(a)='generator'

剩下的就不解释了,这么聪明的你一定看得懂。

原文地址:https://www.cnblogs.com/Sheppard/p/11288942.html