最新消息:

Python中的List Comprehensions(列表推导式/列表解析式)

IT技术 ipcpu 54浏览 0评论

Python中的List Comprehensions(列表推导式/列表解析式).md

一、引入

初学Python的同学经常会遇到一些看起来很简洁,但又不是很好理解的语句,例如下面的

squares = [x * x for x in range(10)]
print(squares)

上面这个写法如果用普通写法就等同于如下

squares = []

for x in range(10):
    squares.append(x*x)

print(squares)

其输出结果如下

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

这种就是Python的列表推导式(List Comprehensions),它可以让代码更简洁,并且可以增加可读性和执行效率。

这些写法常被称作语法糖(Syntactic sugar)。

二、基本语法

列表推导式是一种创建列表的方式,所以列表推导式的返回结果就是一个列表。
列表推导式的基本语法如下:

new_list = [expression(i) for i in old_list if condition(i)]

#*result* = [*transform* *iteration* *filter* ]

三、常见例子

x = [i for i in range(10)]

#获取其中的偶数
print([i for i in x if i%2==0])

#对每个元素求平方
print([i**2 for i in x])



words = ["this","is","a","list","of","words"]

#取每个单词的首字母
print( [word[0] for word in words])


d = {'a':1,'b':2,'c':3}

#筛选 value 值
print([i for i in d.values() if i >1])

#获取 key 值列表,并且可以加 if 判断
print([i for i in d.keys()])

四、扩展-多个for的列表推导式

列表推导式不是只能有一个for循环,使用多个for时相当于嵌套的for循环,例如

list=[1,2,3,4,5]
newlist=[x*y for x in list for y in range(5) if x > 3]
print(newlist)

其含义如果用原始语句表达如下

nlist=[]
for x in list:
    for y in range(0,5):
        if x > 3 :
            nlist.append(x*y)
print(nlist)

五、扩展-字典推导式

除了列表list,Python中的字典dict也支持同样的推导式

dict = {x: x*x for x in [1, 2, 3]}
print(dict)

some_dict={'a':1, 'b':2, 'c':3}
#快速对换Key和Value的位置
print({v: k for k, v in some_dict.items()})

既然列表、字典都有推导式,那元组是不是也有呢?
把[]改成() 不是就可以了呢?很遗憾,如果[]改成()就变成了生成器对象,后面我们再介绍。

六、参考资料

https://www.python.org/dev/peps/pep-0202/
https://juejin.im/post/5b3b2d9ce51d45191556b2ef
https://www.fearlazy.com/index.php/post/152.html

转载请注明:IPCPU-网络之路 » Python中的List Comprehensions(列表推导式/列表解析式)

发表我的评论
取消评论
看不清?
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址