比较2个不同的列表列表

时间:2017-09-20 07:32:00

标签: python python-2.7 python-3.x

例如,有以下2个列表列表

A = [[0, 1, 2, 1, 9], [1, 0, 0, 6, 0], [2, 0, 0, 15, 2], [1, 6, 15, 0, 7], [9, 0, 2, 7, 0]]

B = [[0, 19, 1, 0, 12], [19, 0, 2, 0, 0], [1, 2, 0, 0, 2], [0, 0, 0, 0, 3], [12, 0, 2, 3, 0]]

所以我想要做的是,我想比较两个不同列表中的每个值,比如。我想将A [0] [0]与B [0] [0]进行比较,而不是将A [0] [1]与B [0] [0]进行比较。所以基本上我想比较A中第一个列表中的第一个值和B中的相应值,依此类推。我怎样才能做到这一点?非常感谢你 :) 编辑:抱歉。我的名单长度不同。这是更新版本。

5 个答案:

答案 0 :(得分:5)

如果您需要知道它们是否相同,请运行:

true

结果:import { Chart } from 'chart.js';

答案 1 :(得分:3)

您可以使用双列表解析来始终选择最大值并创建一个新的平面列表:

>>> A = [[0, 1, 2, 1, 9], [1, 0, 0, 6, 0], [2, 0, 0, 15, 2], [1, 6, 15, 0, 7], [9, 0, 2, 7, 0]]
>>> B = [[0, 19, 1, 0, 12], [19, 0, 2, 0, 0], [1, 2, 0, 0, 2], [0, 0, 0, 0, 3], [12, 0, 2, 3, 0]]
>>> [max(a,b) for la,lb in zip(A,B) for a,b in zip(la,lb)]
[0, 19, 2, 1, 12, 19, 0, 2, 6, 0, 2, 2, 0, 15, 2, 1, 6, 15, 0, 7, 12, 0, 2, 7, 0]

如果要保留二维结构,可以使用嵌套列表解析:

>>> [[max(a,b) for a,b in zip(la,lb)] for la,lb in zip(A,B)]
[[0, 19, 2, 1, 12], [19, 0, 2, 6, 0], [2, 2, 0, 15, 2], [1, 6, 15, 0, 7], [12, 0, 2, 7, 0]]

答案 2 :(得分:2)

要检查两个列表是否相等,您只需执行相等检查,如下所示:

A == B

但是,如果您有兴趣了解子列表中的哪些元素不同或可选择,哪些位置或索引"坐标"如果列表不同,那么您可能希望这样做:

A = [[0, 1, 2, 1, 9], [1, 0, 0, 6, 0], [2, 0, 0, 15, 2], [1, 6, 15, 0, 7], [9, 0, 2, 7, 0]]
B = [[0, 19, 1, 0, 12], [19, 0, 2, 0, 0], [1, 2, 0, 0, 2], [0, 0, 0, 0, 3], [12, 0, 2, 3, 0]]

differences = [
    (outer_idx, inner_idx)
    for outer_idx, (a, b) in enumerate(zip(A, B))
    for inner_idx, (a_element, b_element) in enumerate(zip(a, b))
    if a_element != b_element
]

print(differences)

# output
[(0, 1),
 (0, 2),
 (0, 3),
 (0, 4),
 (1, 0),
 (1, 2),
 (1, 3),
 (2, 0),
 (2, 1),
 (2, 3),
 (3, 0),
 (3, 1),
 (3, 2),
 (3, 4),
 (4, 0),
 (4, 3)]

所有这些意味着对于(0,1)列表是不同的。即:A[0][1] != B[0][1]等等。

答案 3 :(得分:1)

#returns True if f is larger than s
def compare(f, s):
    print("comparing {} and {}".format(f,s))
    return f > s

def compare_lists(A,B):
    for sub_lists in zip(A,B):
        for first, second in zip(sub_lists[0], sub_lists[1]):
            compare(first, second)

您还没有指定您想要的比较类型。其他答案假设您要检查是否相等。这是一种更通用的方法。将您想要的任何比较逻辑放入compare(f,s)

编辑:您的子列表包含不同数量的元素。该方法仅根据最短的子列表进行比较。因此,对于[1,2][1],仅比较11,因为第一个列表中没有2的匹配条目。

Edit2:您刚编辑了帖子。我认为长度不同是故意的......

答案 4 :(得分:0)

假设您想知道它们是否相同:

def compare(a,b):
    if (len(a) != len(b) ) return false;
    for i in range(0, len(a)):
       if ( len(a[i]) != len(b[i]) ) return false;
       for j in range(0, len(a[i])):
           if (a[i][j]!=b[i][j]) return false;
    return true;