-1

python中有没有办法将一个列表中的值与第二个列表中相同索引的值进行比较?

例如:我想查看 in 的值list1[0] > list2[0] and list1[1] > list2[1]是否对整个列表执行此操作,但仅返回 in 中更大的值list1

(请注意,我只想比较一个list1直接与 . 中的相同索引对齐的数字,list2因此list1[0]仅针对list2[0]而不是list2[1]等进行测试list2[2]。)

list1 = [100, 223, 335, 143, 218]
list2 = [75, 245, 400, 86, 500]
4

2 回答 2

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)
于 2018-04-06T20:25:22.800 回答
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 中过滤较大的值,请使用列表推导:

>>> [i for i, j in zip(list1, list2) if i >j]
[100, 143]
于 2018-04-06T20:21:57.747 回答