比较两个列表并打印差异的Pythonic方法

16 投票
7 回答
13770 浏览
提问于 2025-04-15 20:03

我有两个列表,它们的长度是一样的。我想比较这两个列表中对应位置的值(除了第一个值),并打印出那些不相同的值。我现在的做法是这样的:

i = len(list1)
if i == 1:
    print 'Nothing to compare'
else:
    for i in range(i):
        if not (i == 0):
            if list1[i] != list2[i]:
                print list1[i]
                print list2[i]

有没有更好的方法来实现这个?(Python 2.x)

7 个回答

2

你可以使用集合:

>>> list1=[1,2,3,4]
>>> list2=[1,5,3,4]
>>> set(list1[1:]).symmetric_difference(list2[1:])
set([2, 5])
5

没有人提到过过滤器:

a = [1, 2, 3]
b = [42, 3, 4]

aToCompare = a[1:]
bToCompare = b[1:]

c = filter( lambda x: (not(x in aToCompare)), bToCompare)
print c
21
list1=[1,2,3,4]
list2=[1,5,3,4]
print [(i,j) for i,j in zip(list1,list2) if i!=j]

输出:

[(2, 5)]

编辑:可以很简单地扩展这个功能,让它跳过前面 n 个项目(输出结果一样):

list1=[1,2,3,4]
list2=[2,5,3,4]
print [(i,j) for i,j in zip(list1,list2)[1:] if i!=j]

撰写回答