在Python中访问给定条件的列表

2024-05-23 17:41:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想访问另一个列表中给定条件的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中的实现相比,它的速度要慢得多。有没有更好的方法来解决这个问题?你知道吗

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


Tags: innumpy元素列表for标准len条件
2条回答

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

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

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

注意,zip是python3的迭代器,而不是python2的迭代器

但我还没有做基准测试

您可以^{}将项目放在一起:

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]

这也避免了为zip()构建列表,即使在使用python2时也是如此。你知道吗

相关问题 更多 >