我有两个保证长度相同的列表。我想比较列表中的相应值(第一项除外)并打印出不匹配的值。我这样做的方式就像这样
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)
答案 0 :(得分: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]
答案 1 :(得分: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
答案 2 :(得分:2)
编辑:oops,没有看到“忽略第一项”部分
from itertools import islice,izip
for a,b in islice(izip(list1,list2),1,None):
if a != b:
print a, b
答案 3 :(得分:2)
标准库中有一个名为difflib.SequenceMatcher
的好类。
答案 4 :(得分:2)
注意跳过第一行的要求:
from itertools import izip
both = izip(list1,list2)
both.next() #skip the first
for p in (p for p in both if p[0]!=p[1]):
print pair
答案 5 :(得分:2)
你可以使用套装:
>>> list1=[1,2,3,4]
>>> list2=[1,5,3,4]
>>> set(list1[1:]).symmetric_difference(list2[1:])
set([2, 5])
答案 6 :(得分:0)
您可以使用user
查找两个列表之间的对称差异(^)。这是执行此操作的最佳pythonic方法之一。
StudentProfile
所以输出将是 {2,5}