我想比较两个元组列表:
larry = [(1,'a'), (2, 'b')]
moe = [(2, 'b'), (1, 'a')]
Run Code Online (Sandbox Code Playgroud)
这样列表中项目的顺序可能不同.是否有库函数来执行此操作?
>> deep_equals(larry, moe)
True
Run Code Online (Sandbox Code Playgroud)
如果我理解你,你的元组代表集合,你的列表代表集合.显而易见的事情是将它们转换为集合:
def setterific(l):
return frozenset(frozenset(p) for p in l)
setterific(larry) == setterific(moe)
Run Code Online (Sandbox Code Playgroud)
这使用了frozensets,因为在python中不能有一组集合(因为集合是可变的); 请参阅如何在Python中创建一组集合?.
如果你只有一个级别的套装,那就去吧frozenset(larry) == frozenset(moe).
如果您所关心的只是最外层列表中项目的顺序(这就是除了“深”这个词之外的所有内容对我的暗示 - 仅它就使我对您的意思产生怀疑),并且您知道有不会重复,您可以使用set.
>>> larry = [(1,'a'), (2, 'b')]
>>> moe = [(2, 'b'), (1, 'a')]
>>> set(larry) == set(moe)
True
Run Code Online (Sandbox Code Playgroud)
如果情况像这些二元组一样简单,您也可以使用 a dict,即{1: 'a', 2: 'b'}。这对您来说可能是更方便的结构,也可能不是更方便的结构。无论如何,比较dict(larry) == dict(moe)都会满足你的要求。
如果您关心重复项,则需要做更多的工作,获取列表的副本并一项一项地取出项目,直到失败或一项为空。
| 归档时间: |
|
| 查看次数: |
5248 次 |
| 最近记录: |