繁体   English   中英

比较两个列表并找到不同的对

[英]Comparing two lists and finding distinct pairs

我正在尝试比较两个列表(包含不同大小的子列表),并找到另一个列表中不存在的对(用圆括号括起来)。

这是代码:

s1 = [
    [('RESOLVED - DUPLICATE', 'VERIFIED')], [('NEW', 'RESOLVED - FIXED'), ('RESOLVED - FIXED', 'VERIFIED')], [('NEW', 'RESOLVED - DUPLICATE'), ('RESOLVED - DUPLICATE', 'VERIFIED')], [('ASSIGNED', 'RESOLVED - FIXED'), ('RESOLVED - FIXED', 'VERIFIED')], [('NEW', 'RESOLVED - WONTFIX'), ('RESOLVED - WONTFIX', 'VERIFIED')], [('NEW', 'RESOLVED - INVALID'), ('RESOLVED - INVALID', 'VERIFIED')]
]

s2 = [
    [('RESOLVED - DUPLICATE', 'VERIFIED')], [('NEW', 'RESOLVED - DUPLICATE'), ('RESOLVED - DUPLICATE', 'VERIFIED')], [('NEW', 'ASSIGNED'), ('ASSIGNED', 'RESOLVED - FIXED')], [('ASSIGNED', 'RESOLVED - FIXED'), ('RESOLVED - FIXED', 'VERIFIED')], [('NEW', 'RESOLVED - WONTFIX'), ('RESOLVED - WONTFIX', 'VERIFIED')]
]

a = []

for item in s2:
    i = 0
    print item
    while (i < len(item)):
        for item1 in s1:
        print item[i]
        if item[i] not in s1:
            a.append(item[i])
        i = i + 1

print a

上面提到的代码没有给出s2中存在的唯一对,而s1中没有。
任何帮助将非常感激。 谢谢!

将您的列表平整化为set对象及其实现的集合操作,在这种情况下,您需要s2s1之间的区别

>>> from itertools import chain
>>> set(chain.from_iterable(s2)).difference(chain.from_iterable(s1))
{('NEW', 'ASSIGNED')}

请注意,您实际上可能希望两者之间存在对称差异 ,即两者中不存在的项目:

>>> set(chain.from_iterable(s1)).symmetric_difference(chain.from_iterable(s2))
{('NEW', 'RESOLVED - FIXED'), ('NEW', 'RESOLVED - INVALID'), ('NEW', 'ASSIGNED'), ('RESOLVED - INVALID', 'VERIFIED')}

假设嵌套结构不相关,并且列表可以展平:

s1flat = [x for sublist in s1 for x in sublist]
s2flat = [x for sublist in s2 for x in sublist]

new_pair = list(set(s2flat) - set(s1flat))

如果您发现s1中不存在的s2项目,则只需使用:

一条线

print([item for item in s2 if item not in s1])

详细:

该列表的理解与:

new_list=[]
for i in s2:
    if i not in s1:
        new_list.append(i)
print(new_list)

输出:

[[('NEW', 'ASSIGNED'), ('ASSIGNED', 'RESOLVED - FIXED')]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM