我有一個列表的二維列表,我正在做一些東西,並得到,因此略有修改列表的二維列表。我無法跟蹤在我收到新列表之前要進行的更改。我想獲得所有已更改的項目列表,其中 [[1,2,3], [4,5,6], [7,8,9]]
變爲[[1,None,3], [4,None,6], [7,None, None]]
,我將獲得一個列表[(0,1), (1,1), (2, 1), (2,2)]
我知道您通常可以做list(set(a)-set(b))
但是當我嘗試它時,我得到了TypeError: unhashable type: 'list'
那麼什麼是最有效的方法這樣做?獲取兩個2D列表之間的差異
2
A
回答
3
使用列表理解:
>>> a = [[1,2,3], [4,5,6], [7,8,9]]
>>> b = [[1,None,3], [4,None,6], [7,None, None]]
>>> [(i,j) for i, row in enumerate(a) for j, x in enumerate(row) if b[i][j] != x]
[(0, 1), (1, 1), (2, 1), (2, 2)]
4
使用zip
,enumerate
和發電機功能:
def diff(lis1, lis2):
for i, (x, y) in enumerate(zip(lis1, lis2)):
for j, (x1, y1) in enumerate(zip(x, y)):
if x1 != y1:
yield i, j
...
>>> lis1 = [[1,2,3], [4,5,6], [7,8,9]]
>>> lis2 = [[1,None,3], [4,None,6], [7,None, None]]
>>> list(diff(lis1, lis2))
[(0, 1), (1, 1), (2, 1), (2, 2)]
0
如果列表中有一個規則的結構,即每個子列表具有相同的長度,你不介意使用外部軟件包,numpy
可以提供幫助。
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
b = np.array([[1,None,3], [4,None,6], [7,None, None]])
print(np.where(a!=b))
>>>(array([0, 1, 2, 2]), array([1, 1, 1, 2]))
相關問題
- 1. 獲取兩個NSStrings之間的差異
- 2. 獲得兩個表之間的差異?
- 3. 根據一列獲取兩個數據表之間的差異
- 4. C#兩個列表之間的差異
- 5. 從2個REF'd列獲取兩個日期之間的差異
- 6. 獲取兩個日期列之間的差異分鐘
- 7. 使用LINQ獲取兩個表之間的差異
- 8. 在Python中使用散列獲取兩個對象列表之間的差異
- 9. postgresql - 得到兩個表格之間的列的差異列表
- 10. 兩個2d向量之間的角度,兩種方法之間的差異?
- 11. 兩個表之間的日期差異
- 12. 兩個表之間的差異
- 13. sqlite select兩個表之間的差異
- 14. 獲取目標C中兩個NSString之間的差異時間
- 15. 如何獲取兩個日期時間值之間的差異?
- 16. 獲取2個列表之間的差異
- 17. 基於特定字段獲取兩個列表之間的差異
- 18. 評估兩個列表之間的序列差異的算法
- 19. 獲取兩個子查詢的計數之間的差異
- 20. 如何獲取php中的兩個單詞之間的差異
- 21. Actionscript - 獲取兩個對象之間的差異
- 22. 獲取兩個日期之間的差異秒數dateTime
- 23. Sharepoint - 獲取兩個SPListItemCollection之間的差異
- 24. 獲取兩個日期之間的差異
- 25. 獲取兩個日期之間的差異。
- 26. 獲取兩個版本之間的差異在TFS
- 27. 從DatePicker獲取兩個日期之間的差異
- 28. 獲取兩個日期對象之間的小時差異?
- 29. 如何獲取兩個JSON之間的差異?
- 30. 獲取兩個日期之間的差異