Python中的常用的数据结构推导式

Python中的常用的数据结构推导式

列表推导式

基本格式为:

[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

具体分两种:

* [x for x in data if condition]

此处if主要起条件判断作用,data数据中只有满足if条件的才会被留下,最后统一生成为一个数据列表。

* [exp1 if condition else exp2 for x in data]

此处if…else主要起赋值作用,当data中的数据满足if条件时将其做exp1处理,否则按照exp2处理,最后统一生成为一个数据列表。
为了加深理解我们举个例子:
例1:过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母:

> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']

例3: 求(x,y),其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表:

list = [(x,y) for x in range(5) if x%2 == 0 for y in range(5) if y%2 == 1]
print(list)

D:\anaconda\python.exe D:/bilibili大学/简书代码/推导式.py
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]

Process finished with exit code 0

注意:
使用()生成generator:
将俩表推导式的[]改成()即可得到生成器。

multiples = (i for i in range(30) if i % 3 is 0)
print(type(multiples))

Output: <type 'generator'>

字典推导式

基本格式为:

{ key:value for key,value in existing_data_structure }

这里和list有所不同,因位dict里面有两个关键的属性,key 和 value,但大同小异,我们现在的expression部分可以同时对 key 和 value 进行操作。
下面来看最常见的应用。
例1: 用字典推导式配合枚举的使用案例:

strings = ['import','is','with','if','file','exception','shim','lucy']
dict = {k:v for v,k in enumerate(strings)}
print(dict)
*********************************
D:\anaconda\python.exe D:/ysh/tds.py
{'import': 0, 'is': 1, 'with': 2, 'if': 3, 'file': 4, 'exception': 5, 'shim': 6, 'lucy': 7}

Process finished with exit code 0

从这个例题我们发散一下,上题的k是字符串,v是序列。如果我们更换kv呢:

strings = ['import','is','with','if','file','exception','shim','lucy']
dict = {k:v for k,v in enumerate(strings)}
print(dict)
*************************
D:\anaconda\python.exe D:/ysh/tds.py
{0: 'import', 1: 'is', 2: 'with', 3: 'if', 4: 'file', 5: 'exception', 6: 'shim', 7: 'lucy'}

Process finished with exit code 0

显然中间的kv就是控制键值的。

集合推导式`

基本格式:

{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }

其中,用 [] 括起来的部分,可以使用,也可以省略。集合推导式和字典推导式的格式完全相同,那么给定一个类似的推导式,如何判断是哪种推导式呢?最简单直接的方式,就是根据表达式进行判断,如果表达式以键值对(key:value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式。
例 1 既然生成的是集合,那么其保存的元素必须是唯一的。

tupledemo = (1,1,2,3,4,5,6,6)
setnew = {x**2 for x in tupledemo if x%2==0}
print(setnew)

运行结果为:

{16, 4, 36}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值