Python中的列表推导(List Comprehension)

    列表推导(List Comprehension)是在一些编程语言中存在的一种语法,目的是从一个存在的列表创建另一个列表。最便于理解这种语法的方法是来看看它的来源——集合的构建式表示法。请看以下的集合表达式:


其中的N是自然数集合,则集合S是由平方大于3的自然数乘以2组成的,这其中N是已存在的集合,x平方大于3是过滤条件,而2乘以x是产生新元素的表达式。下面来看一下Python中列表推导的语法:

[myExpression for myVar in myList if myPredicateExpression]

是否看得出来和集合的构建表达式很像?其中myList式已存在的列表,myPredicateExpression是过滤条件,而myExpression是产生新元素的表达式,if myPredicateExpression是可选项。来看两个简单的例子:

In [14]: [x for x in ["a", "b", "c"]]
Out[14]: ['a', 'b', 'c']

In [15]: [x**3 for x in range(10) if x%2==1]
Out[15]: [1, 27, 125, 343, 729]

灵活使用列表推导以后,可以显著简化一些代码,请看以下一些例子:

例1:从一个英文文件中读入所有的行并分词

with open('file.txt') as f:
    words = [l.strip().split(" ") for l in f.readlines() if len(l.strip()) > 0]

执行后将生成一个二维数组,内层数组的元素为分好的单词

例2:Jewels and Stones问题

class Solution:
    def numJewelsInStones(self, J, S):
        setJ = set(J)
        return sum(c in setJ for c in S)

参考资料

https://en.wikipedia.org/wiki/List_comprehension

https://leetcode.com/problems/jewels-and-stones/description/

https://www.oschina.net/translate/list_comprehension?lang=eng

https://stackoverflow.com/questions/3277503/in-python-how-do-i-read-a-file-line-by-line-into-a-list

猜你喜欢

转载自blog.csdn.net/gongxsh00/article/details/80090352