我有两个类似这样的列表:
l1 = [('zero', 0),('one', 2),('two', 3),('three', 3),('four', 5)]
l2 = [('zero', 0),('one', 3),('four', 2),('ten', 3),('twelve', 8)]
我想比较这两个列表并
- 如果两个值相同,从两个列表中都移除重复项
- 如果第一个值匹配,则从列表中删除第二个值较低的元组
我可以用以下方法实现第一个要求:
l3 = [(a,b) for (a,b) in l1 if (a,b) not in l2]
l4 = [(a,b) for (a,b) in l2 if (a,b) not in l1]
或者使用 set
,虽然它不能保证顺序。
l3 = set(l1) - set(l2)
但我很难理解第二个。我试图只根据第一个值进行删除。
l3 = [(a,b) for (a,b) in l1 if a not in l2]
但是那样不起作用。我期望l3和l4的输出结果是:
l3
[('two', 3),('three', 3),('four', 5)]
l4
[('one', 3),('ten', 3),('twelve', 8)]
希望能得到任何指导。
d1[k] <= v
和d2[k] <= v
交换一下,这样输出结果才会符合预期。如果你按照k not in d2 or d1[k] > v
进行分配,可能会更加清晰易懂。 - ssp