我有一个整数列表,我想创建一个新的列表,所有元素都小于给定的限制。在Python中的详细列表理解
a=range(15) #example list
limit=9 #example limit
我对解决这个问题的方法是
[i for i in a if i < limit]
对我来说,开始“我为我在”看起来相当冗长。在Python中是否有更好的实现?
我有一个整数列表,我想创建一个新的列表,所有元素都小于给定的限制。在Python中的详细列表理解
a=range(15) #example list
limit=9 #example limit
我对解决这个问题的方法是
[i for i in a if i < limit]
对我来说,开始“我为我在”看起来相当冗长。在Python中是否有更好的实现?
你可以使用filter
>>> filter(lambda i: i < limit, a)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
但列表内涵是做
这里的首选方法是什么python docs不得不说的是:
列表解析提供了一个简明的 使用map(),filter()和/或()创建列表的方式不需要使用 10 lambda。结果清单定义 往往比使用这些结构构建的清单 更清晰。
这比示例列表理解更长! – Triptych 2009-09-22 17:11:18
您可以使用过滤器()(至少在Python 2.x的系列...我认为这可能会在3.0被移除)
newlist = filter(lambda item: item < limit, oldlist)
的第一个参数可以是任何可调用(它的结果将被强制为boolean,因此最好使用返回布尔值的callable),第二个参数可以是任何序列。
这是关于你可以做的最好的。你可以用过滤器做得更好,但我不会推荐它。请记住,列表理解读取几乎像英语:“我为我在一个如果我的<限制”。这使得它更容易阅读和理解,如果在冗长的一面。
更好的版本需要样板代码,所以列表理解是一样好,你可以得到。
这将是一个不同的方式做到这一点:
from operator import ge
from functools import partial
filter(partial(ge, limit), a)
(但如果你使用filter
,Nadia's way会做的明显的方式)
什么是* *更好? – SilentGhost 2009-09-22 14:39:31
“相当详细”?你怎么能够以一般的方式来减少这种情况?请提供您的首选语法。你期望什么? – 2009-09-22 14:41:38
@SilentGhost:与往常一样,Python中的'better'一词意味着遵循Python的Zen。 – Roland 2009-09-22 14:58:08