我在Python中使用zip()函数。
我正在压缩两个列表,但是,某些列表中包含值0
。我想避免使用零中的任何元组。
x = [1, 2, 3]
y = [0, 0, 6]
zipped = zip(x, y)
>>> zipped
[(3, 6)]
在尝试解决这个问题的过程中,我也意识到任何可能的解决方案可能会很慢,如果它涉及拉链然后移除。
有没有办法在拉链上加入条件?或者我应该探索一种不同的,更快的方法吗?
非常感谢任何建议。
答案 0 :(得分:2)
您可以izip
并且只传递正确的值:
from itertools import izip
zipped = [(xx, yy) for xx, yy in izip(x, y) if yy]
我选择izip
超过zip
的原因是因为在python2.x中,zip
会生成一个真正没有必要的新列表。 izip
避免了这种开销。
在python3.x中,内置zip
没有此列表实现行为,因此您应该使用它。 (事实上,itertools.izip
甚至不存在于python3.x中)
答案 1 :(得分:2)
zip()
本身不会涵盖这一特定要求。不过,您可以将它与列表推导一起使用以获得所需的结果:
>>>x = [1, 2, 3]
>>>y = [0, 0, 6]
>>>zipped = [(a,b) for a,b in zip(x,y) if a and b]
>>>zipped
[(3,6)]
关于此方法的速度。它会比使用循环创建的任何新解决方案快得多,因为在这种情况下循环在C中本地执行,这比Python的循环更快。