在python中有没有办法比较一个列表中的值和第二个列表中相同索引的值?
例如:我想查看list1[0] > list2[0] and list1[1] > list2[1]
中的值是否为整个列表执行此操作,但仅返回list1
中较大的值。< / p>
(注意我只想比较list1
中与list2
中的相同索引直接对齐的数字。所以list1[0]
仅针对list2[0]
进行测试而不是{ {1}}或list2[1]
等。)
list2[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]