2

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

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

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

谢谢

4

4 回答 4

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
于 2013-09-12T12:52:29.993 回答
2
a = [1,2,3]
b = [0, 0.1, 4]

map (max, zip(a,b))

Output: [1, 2, 4]
于 2013-09-12T12:48:17.997 回答
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]

或者,更简洁,

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

如果您想要True/False值列表(True其中项目 ina大于项目 in bFalse否则),您可以使用itertools.starmapoperator.gt

In [15]: import itertools as IT

In [17]: list(IT.starmap(operator.gt, zip(a,b)))
Out[17]: [True, True, False]
于 2013-09-12T12:47:21.800 回答
1

如果你不介意额外的依赖,numpy 是这类东西的理想选择。

import numpy as np
a = np.array([1,2,3])
b = np.array([0, 0.1, 4])
c = a > b
于 2013-09-12T12:52:19.190 回答