成对比较列表并仅返回list1

时间:2018-04-06 20:17:18

标签: python list comparison pairwise

在python中有没有办法比较一个列表中的值和第二个列表中相同索引的值?

例如:我想查看list1[0] > list2[0] and list1[1] > list2[1]中的值是否为整个列表执行此操作,但仅返回list1 中较大的值。< / p>

(注意我只想比较list1中与list2中的相同索引直接对齐的数字。所以list1[0]仅针对list2[0]进行测试而不是{ {1}}或list2[1]等。)

list2[2]

2 个答案:

答案 0 :(得分:3)

如果您不介意使用numpy(),则可以使用高级索引来使list1中的元素大于list2中各自的值:

In [7]: list1 = np.array([100, 223, 335, 143, 218])
   ...: list2 = np.array([75, 245, 400, 86, 500])
   ...:

In [8]: list1[list1 > list2]
Out[8]: array([100, 143])

如果您最终希望在非常大的列表上进行此计算,则使用numpy()等库将会提高您的性能:

In [5]: a = np.random.rand(10000)

In [6]: b = np.random.rand(10000)

In [7]: %timeit a[a > b]
56.5 µs ± 1.3 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [8]: %timeit [i for i, j in zip(a, b) if i >j]
1.83 ms ± 28.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 1 :(得分:1)

您可以zip两个列表进行收集,并比较值:

>>> list1 = [100, 223, 335, 143, 218]
>>> list2 = [75, 245, 400, 86, 500]
>>> 
>>> for i, j in zip(list1, list2): print i, j, i < j
... 
100 75 False
223 245 True
335 400 True
143 86 False
218 500 True

要从list1过滤较大的值,请使用list comprehension:

>>> [i for i, j in zip(list1, list2) if i >j]
[100, 143]