在Python中访问另一个列表中给出条件的列表

时间:2015-02-24 22:21:51

标签: python list numpy list-comprehension

我想在另一个列表中访问给定条件的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

2 个答案:

答案 0 :(得分:2)

您可以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()构建列表。

答案 1 :(得分:0)

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

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

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

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

我没有基准测试