考虑API返回四个列表作为输出。我们将输出视为
a = [1,2,3,4]
b = [1,2,3,4]
c = [1,2,4,3]
d = [1,2,3,5]
现在,首先我们要比较这些列表是否相等。
仅当元素和索引匹配时,列表才相等。
例如,从上面的列表中,a
和b
是相同的。但a
和c
不相等。
如果列表不相等,则输出预期为:此列表中此索引处的此元素与其他不同。
为了比较和获得两个列表的差异,我写了以下代码。
for i in range(len(a)):
if a[i] != c[i]:
print "Expected value at ",i," is ",a[i]
print "But got value ",c[i],"in second list"
现在问题是如何为以上四个列表实现这一目标?
答案 0 :(得分:4)
您可以使用zip
同时迭代每个列表并比较每个索引的值。在下面的示例中,我将列表a
的值与剩余列表进行比较。
a = [1,2,3,4]
b = [1,2,3,4]
c = [1,2,4,3]
d = [1,2,3,5]
for i, x in enumerate(zip(a, b, c, d)):
print('--------- Index: {}'.format(i))
base = x[0]
for j, y in enumerate(x[1:], 2):
if base!=y:
print('{} not equal to {} : --> List {}'.format(base, y, j))
打印:
--------- Index: 0
--------- Index: 1
--------- Index: 2
3 not equal to 4 : --> List 3
--------- Index: 3
4 not equal to 3 : --> List 3
4 not equal to 5 : --> List 4
答案 1 :(得分:1)
来自评论:
如何找到我们有不同价值的列表?
import collections as ct
counter = ct.Counter(map(tuple, [a,b,c,d])) # make hashable keys w/tuples
base = counter.most_common(1)[0][0] # find most frequent sequence
[list(seq) for seq in counter if seq != base] # filter uncommon sequences
输出(不匹配列表):
[[1, 2, 4, 3], [1, 2, 3, 5]]
我们会在sequences中收集所有类似的collections.Counter
作为密钥。如果所有序列都匹配,则Counter
字典中应该只有一个条目。否则,过滤剩余的序列。
答案 2 :(得分:0)
设置列表mylist = [a, b, c,d]
然后循环检查哪些是相等的以及哪些不相等。
for i in range(len(mylist)-1)
for j in range(i+1, len(mylist))
# Check mylist[i] agaist mylist[j] and report results
例如,这将针对b,c和d执行测试
b针对c和d
c反对d