【发布时间】:2012-03-10 17:31:39
【问题描述】:
我想比较两个元组列表:
larry = [(1,'a'), (2, 'b')]
moe = [(2, 'b'), (1, 'a')]
使得列表中项目的顺序可能不同。 是否有库函数可以做到这一点?
>> deep_equals(larry, moe)
True
【问题讨论】:
标签: python
我想比较两个元组列表:
larry = [(1,'a'), (2, 'b')]
moe = [(2, 'b'), (1, 'a')]
使得列表中项目的顺序可能不同。 是否有库函数可以做到这一点?
>> deep_equals(larry, moe)
True
【问题讨论】:
标签: python
如果我理解你,你的元组代表集合,你的列表代表集合。显而易见的事情是将它们转换为集合:
def setterific(l):
return frozenset(frozenset(p) for p in l)
setterific(larry) == setterific(moe)
这使用了frozensets,因为在python中不能有集合的集合(因为集合是可变的);见How can I create a Set of Sets in Python?。
如果您只有一个级别的集合,请使用frozenset(larry) == frozenset(moe)。
【讨论】:
如果你只关心最外层列表中项目的顺序(除了“深”这个词之外的所有东西都向我暗示——它让我对你的意思产生怀疑),你知道没有重复,您可以使用set。
>>> larry = [(1,'a'), (2, 'b')]
>>> moe = [(2, 'b'), (1, 'a')]
>>> set(larry) == set(moe)
True
如果情况像这两个元组一样简单,您还可以使用dict,即{1: 'a', 2: 'b'}。这对您来说可能是也可能不是更方便的结构。无论如何,dict(larry) == dict(moe) 的比较会做你想做的事。
如果你关心重复,这将需要更多的工作,复制列表并一个接一个地拉出项目,直到它失败或一个是空的。
【讨论】: