比较两个列表并打印差异的Pythonic方法
我有两个列表,它们的长度是一样的。我想比较这两个列表中对应位置的值(除了第一个值),并打印出那些不相同的值。我现在的做法是这样的:
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]