【问题标题】:Is it possible to limit the length of a conditional list comprehension in Python?是否可以限制 Python 中条件列表理解的长度?
【发布时间】:2021-01-10 18:33:24
【问题描述】:

我正在做一个条件列表理解,例如newlist = [x for x in list if x % 2 == 0]。我想将 resulting 列表的长度限制为特定数字。

如果不先理解整个列表然后对其进行切片,这是否可能?

我想象一些具有以下功能的东西:

limit = 10
newlist = []

for x in list:

    if len(newlist) > limit:
        break 

    if x % 2 == 0:
        newlist.append(x)

对原始列表进行切片(例如,[x for x in list[:25] if x % 2 == 0] 是不可能的,因为在我的特定用例中,if 条件不会在任何可预测的时间间隔内返回 True

非常感谢。

【问题讨论】:

  • 虽然有可能,但你为什么要这样做?该解决方案将包括几个深度嵌套的表达式——使用循环可能更易读。

标签: python list-comprehension


【解决方案1】:

请不要命名任何变量list,因为它会影响内置的list 构造函数。我在这里用li代替了输入列表。

import itertools as it

gen = (x for x in li if x % 2 == 0)  # Lazy generator.
result = list(it.islice(gen, 25))

【讨论】:

    【解决方案2】:

    由于您正在使用列表推导式创建列表,因此您可以在创建列表后直接对其进行切片。

    [x for x in list[:25] if x % 2 == 0][:limit]

    【讨论】:

    • 这显然不是问题所希望的:“如果不先理解整个列表然后对其进行切片,这是否可能?”
    • 嘿,看起来是这样。这就是你在深夜回答问题时得到的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    相关资源
    最近更新 更多