我有一个整数列表,我想创建一个所有元素都小于给定限制的新列表。
a=range(15) #example list
limit=9 #example limit
我解决这个问题的方法是
[i for i in a if i < limit]
对我来说,开头的“i for i in”看起来很冗长。Python中有更好的实现吗?
我有一个整数列表,我想创建一个所有元素都小于给定限制的新列表。
a=range(15) #example list
limit=9 #example limit
我解决这个问题的方法是
[i for i in a if i < limit]
对我来说,开头的“i for i in”看起来很冗长。Python中有更好的实现吗?
这是你能做的最好的事情。您可能可以使用过滤器做得更好,但我不推荐它。请记住,列表理解读起来几乎像英语:“i for i in a if i < limit”。这使得它更容易阅读和理解,如果有点冗长的话。
您可以使用 filter() (至少在 Python 2.x 系列中......我认为它可能已在 3.0 中删除)
newlist = filter(lambda item: item < limit, oldlist)
第一个参数可以是任何可调用的(其结果将被强制为布尔值,因此最好使用无论如何返回布尔值的可调用),第二个参数可以是任何序列。
更好的版本需要样板代码,因此列表理解尽可能好。
这将是一种不同的方法:
from operator import ge
from functools import partial
filter(partial(ge, limit), a)
(但如果你要使用filter
,Nadia 的方式将是显而易见的方式)