0

我有一个整数列表,我想创建一个所有元素都小于给定限制的新列表。

a=range(15) #example list
limit=9 #example limit

我解决这个问题的方法是

[i for i in a if i < limit]

对我来说,开头的“i for i in”看起来很冗长。Python中有更好的实现吗?

4

4 回答 4

4

你可以使用过滤器

>>> filter(lambda i: i < limit, a)
[0, 1, 2, 3, 4, 5, 6, 7, 8]

但是列表推导是首选的方法

以下是python 文档对此的看法:

列表推导式提供了一种简洁的方式来创建列表,而无需使用 map()、filter() 和/或 lambda。结果列表定义往往比使用这些结构构建的列表更清晰。

于 2009-09-22T14:40:16.357 回答
2

这是你能做的最好的事情。您可能可以使用过滤器做得更好,但我不推荐它。请记住,列表理解读起来几乎像英语:“i for i in a if i < limit”。这使得它更容易阅读和理解,如果有点冗长的话。

于 2009-09-22T14:43:39.567 回答
1

您可以使用 filter() (至少在 Python 2.x 系列中......我认为它可能已在 3.0 中删除)

newlist = filter(lambda item: item < limit, oldlist)

第一个参数可以是任何可调用的(其结果将被强制为布尔值,因此最好使用无论如何返回布尔值的可调用),第二个参数可以是任何序列。

于 2009-09-22T14:40:15.453 回答
0

更好的版本需要样板代码,因此列表理解尽可能好。

这将是一种不同的方法:

from operator import ge
from functools import partial

filter(partial(ge, limit), a)

(但如果你要使用filterNadia 的方式将是显而易见的方式)

于 2009-09-22T14:54:43.307 回答