python - 如何比较两个集合,其中每个元素都是列表?

标签 python list set

这是我的代码。

a = [
        ['StarList', 'StarId38', 'ShipList']
    ]
b = [
        ['StarList', 'StarId3', 'ShipList'],
        ['StarList', 'StarId4', 'ShipList']
    ]
assert set(a) == set(b) # False

a = [
        ['StarList', 'StarId4', 'ShipList'],
        ['StarList', 'StarId3', 'ShipList']
    ]
assert set(a) == set(b) # True

它不起作用:

Traceback (most recent call last):
    File "compare.py", line 8, in <module>
        assert set(a) == set(b) # False
TypeError: unhashable type: 'list'

那么,怎么做呢?

最佳答案

在比较之前将内部列表转换为元组或其他一些可哈希类型。

In [52]: a = [                               
        ['StarList', 'StarId38', 'ShipList']
    ]

In [53]: b = [                               
        ['StarList', 'StarId3', 'ShipList'],
        ['StarList', 'StarId4', 'ShipList']
    ]

In [54]: set(map(tuple, a)) == set(map(tuple, b))
Out[54]: False

In [55]: a = [
   ....:         ['StarList', 'StarId4', 'ShipList'],
   ....:         ['StarList', 'StarId3', 'ShipList']
   ....:     ]

In [56]: set(map(tuple,a))==set(map(tuple,b))
Out[56]: True

关于python - 如何比较两个集合,其中每个元素都是列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223176/

相关文章:

python - 使用 Python Pandas 提取网站响应中的交易值

python - 是否可以将 django-celery-beat 与 django-tenant 一起使用?

python - 计算 Python 列表中真正 boolean 值的数量

jquery - 我想在单击 #gen 后使用文本框值设置 <a> href?

Javascript 对象与映射/设置键查找性能

Java Set 获取重复条目

GIF 和 JPEG 的 Python 和 PIL 像素值不同

python - 如何将私有(private) Python 包列为 Conda 要求?

c# - 在 C# 列表容器中查找和/或访问值

list - 在 Prolog 中以列表形式存储和显示结果