[英]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
对象及其实现的集合操作,在这种情况下,您需要s2
和s1
之间的区别 ,
>>> 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.