【问题标题】:Accessing a list given a condition on another list in Python在 Python 中访问另一个列表中给定条件的列表
【发布时间】:2015-04-26 18:26:05
【问题描述】:

给定另一个列表中的条件,我想访问 list 的元素。通常,我会使用 NumPy 来做到这一点,但我必须遵循的要求表明我必须坚持使用 Python 标准库。我的问题的一个例子如下:

x = [1, 7, 11, 8, 13, 2]
y = [0,3,0,5,2]
#NumPy notation
z = x[y==0]

我通过使用列表理解提出了一个解决方案:

z = [x[i] for i in xrange(len(y)) if y[i] == 0]

但是,与我在 NumPy 中的实现相比,它要慢得多。有没有更好的方法来解决这个问题?

编辑:我没有提到,但我的要求包括使用 python 2

【问题讨论】:

  • 你不会使用标准 python 库获得更有效的解决方案。

标签: python list numpy list-comprehension


【解决方案1】:

你可以zip()把物品放在一起:

try:
    # iterator zip from Python 3
    from future_builtins import zip
except ImportError:
    # this *is* Python 3
    pass

z = [xval for xval, yval in zip(x, y) if yval == 0]

即使在使用 Python 2 时,这也避免了为 zip() 构建列表。

【讨论】:

  • 你应该使用if yval==0而不是`y==0
【解决方案2】:

我个人会使用iteratorszip(如果一个列表更短,它会更快)

这样我就避免了对元素的双重访问,如果一个列表比另一个短我也没有例外(你应该在xrange(min(len(x),len(y))中使用)

[a for (a,b) in zip(x,y) if b==0]

注意 zip 是 Python 3 的迭代器,而不是 Python 2 的迭代器

虽然我没有进行基准测试

【讨论】:

    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多