![](/img/trans.png)
[英]How do i make python find differing elements in a list and their number of occurrences within it
[英]python find differing elements in list
我想比較這種清單:
A = [0,1,0,1,0,1,0,0,0,1,0,1,0,1,0]
B = [0,1,0,1,0,0,0,1,0,1,0,1,0,1,0]
並找出哪些元素有所不同。 在這種情況下,它應該返回A的索引5和B的索引7。所有其他元素相同。 有這個功能嗎?
最好,美國
>>> [index for (_, index) in set(zip(A, xrange(len(A)))) - set(zip(B, xrange(len(B))))]
[5, 7]
這到底在做什么?
編輯
感謝Roman的評論,這比較簡單,但是卻做同樣的事情。
>>> [index for (index, _) in set(enumerate(A)) - set(enumerate(B))]
[5, 7]
請注意,雖然zip
生成一個列表,但enumerate
生成一個可枚舉的對象,該對象立即被枚舉以構建列表。 同樣,它會生成類型為(index, value)
而不是(value, index)
如上面的答案。
您一定要單線嗎? 因為否則會有更簡單的代碼:
for i in range(len(A)):
if A[i]!=B[i]:
print i
這樣的事情應該可以解決這個問題(未經測試):
[i for i, v in enumerate(zip(A, B)) if sum(v) == 1]
這將返回在每個列表中具有不同值的元素數量的列表。
如果您的數據集與問題中的數據集不同,則可以使用以下方法:
[i for i, v in enumerate(zip(A, B)) if v[0] != v[1]]
另一種(也許更具可讀性?)
>>> [index for (index,(a,b)) in enumerate(zip(A,B)) if a!=b]
[5, 7]
首先,將列表壓縮在一起:
[(0, 0), (1, 1), (0, 0), (1, 1), (0, 0), (1, 0), (0, 0), (0, 1), (0, 0),
(1, 1), (0, 0), (1, 1), (0, 0), (1, 1), (0, 0)]
然后使用enumerate()
函數將索引附加到項目:
[(0, (0, 0)), (1, (1, 1)), (2, (0, 0)), (3, (1, 1)), (4, (0, 0)), (5, (1, 0)),
(6, (0, 0)), (7, (0, 1)), (8, (0, 0)), (9, (1, 1)), (10, (0, 0)), (11, (1, 1)),
(12, (0, 0)), (13, (1, 1)), (14, (0, 0))]
然后,它使用相當標准的列表理解來比較項目,並在項目不匹配的地方建立索引列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.