玩Python拉链功能

时间:2013-09-12 12:44:27

标签: python

说我想在2个列表中找到“大于”。

a = [1,2,3]
b = [0, 0.1, 4]
map( <something>, zip(a,b))

我试过操作员模块。它有一个operator.gt()方法。但我无法找到一种方法来使用它与zip。有任何想法吗?编辑:如果其中任何一个为True,则输出只是一个True值。

感谢

4 个答案:

答案 0 :(得分:8)

要将列表a中的项目与b中的项目进行比较,您不必使用zip()

>>> a = [1, 2, 3] 
>>> b = [0, 0.1, 4]
>>> map(operator.gt, a, b)
[True, True, False]
>>> 

但另一方面,你没有指定你期望的输出类型。

修改

要有效OR结果,请用any()换行。像这样:

>>> any(map(operator.gt, a,b))
True

答案 1 :(得分:2)

In [6]: a = [1,2,3]

In [7]: b = [0, 0.1, 4]

In [8]: [max(a_,b_) for a_,b_ in zip(a,b)]
Out[8]: [1, 2, 4]

或者,pithier,

In [9]: map(max, zip(a,b))
Out[9]: [1, 2, 4]

如果您需要True/False值列表True,其中a中的项目大于b中的项目,False则为In [15]: import itertools as IT In [17]: list(IT.starmap(operator.gt, zip(a,b))) Out[17]: [True, True, False] ,您可以itertools.starmap使用operator.gt

{{1}}

答案 2 :(得分:2)

a = [1,2,3]
b = [0, 0.1, 4]

map (max, zip(a,b))

Output: [1, 2, 4]

答案 3 :(得分:1)

如果你不介意额外的依赖性,那么numpy对于这种东西来说是理想的。

import numpy as np
a = np.array([1,2,3])
b = np.array([0, 0.1, 4])
c = a > b