根据 Python 中另一个列表的条件访问列表
Accessing a list given a condition on another list in 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 中的实现相比,它要慢得多。有没有更好的方法来解决这个问题?
编辑:我没有提到,但我的要求包括使用 python 2
我个人会使用 iterators
和 zip
(如果一个列表更短,它会更快)
这样我就避免了对元素的双重访问,如果一个列表比另一个短我也没有例外(你应该在 xrange(min(len(x),len(y))
中使用)
[a for (a,b) in zip(x,y) if b==0]
请注意,zip 是 python 3 的迭代器,而不是 python 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 时,这也避免了为 zip()
构建列表 2.
我想在给定另一个列表条件的情况下访问 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
我个人会使用 iterators
和 zip
(如果一个列表更短,它会更快)
这样我就避免了对元素的双重访问,如果一个列表比另一个短我也没有例外(你应该在 xrange(min(len(x),len(y))
中使用)
[a for (a,b) in zip(x,y) if b==0]
请注意,zip 是 python 3 的迭代器,而不是 python 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 时,这也避免了为 zip()
构建列表 2.