7

假设我有两个列表。它们是从 -5 到 5 的书籍评级列表。

我想知道 list1 的元素是什么时候,>= 1而 list2 的元素是什么时候== 0,例如。

list1 = [3, 3, 1, 0, 3, 0, 3, 0, 0, -3, 0, 5, 3, 0, 1, 0, 0, 5, 3, 0, 0, 0, 0, 1, 0, 3, 0, 1, 0, 0, 3, 5, 3, 3, 0, 0, 0, 5, 0, 5, 0, 3, 3, 0, -3, 0, 0, 5, 1, 5, 3, 0, 3, 0, 0]
list2 = [5, 0, 0, 0, 0, 0, 5, 0, 0, 1, 0, 5, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 5, 5, 5, 3, 0, 0, 0, 3, 0, 0, 0, 5, 3, 0, 0, 0, 0, 5, 0, 5, 3, 0, 0, 0, 0]

list1[1] = 3并且list2[1] = 0,我希望能够找到发生这种情况的所有不同索引。

抱歉,如果这令人困惑,但我真的不知道该怎么说。

4

5 回答 5

11
>>> [i for i, v in enumerate(list1) if v>=1 and list2[i]==0]
[1, 2, 4, 14, 18, 27, 39, 48, 52]
于 2012-04-12T17:08:39.270 回答
7

另一种变体:

>>> [i for i, (l1, l2) in enumerate(zip(list1, list2)) if l1 >= 1 and l2 == 0]
[1, 2, 4, 14, 18, 27, 39, 48, 52]
于 2012-04-12T17:12:05.463 回答
4
>>>idx_list = [i for i in range(len(list1)) if list1[i] > 1 and list2[i] == 0]
于 2012-04-12T17:08:42.607 回答
2

使用 NumPy 数组,这可以通过逻辑索引实现:

 import numpy as np
 list1 = np.array([1, -1, 0, 0, 1])
 list2 = np.array([0, 5, 0, 0, 0])

 # Option 1, multiply the logicals together.
 inds = np.where( (list1 >= 1)*(list2 == 0) )[0]

 # Option 2, pure logicals.
 inds = np.where( (list1 >= 1) & (list2 == 0) )[0]

现在inds[0] = 0inds[1] = 4

于 2012-04-12T17:15:38.237 回答
2

我发现这更具可读性。

>>> from itertools import count
>>> [i for i,one,two in zip(count(0), list1, list2) if one >= 1 and two == 0]
[1, 2, 4, 14, 18, 27, 39, 48, 52]

这是itertools.count文档

于 2012-04-12T17:11:34.070 回答