我有 lista
和 list b
。所以我需要找到,如果列表具有相同的元素。我不知道,但我正在考虑使用collections
.
问问题
365 次
2 回答
4
假设你不关心订单。这里有几个选项,最佳解决方案取决于列表的内容。以下是一些按偏好(和限制)顺序排列的可能性:
如果没有重复项,并且所有项目都是可散列的:
set(a) == set(b)
如果有重复项,并且所有项目都属于同一类型:
sorted(a) == sorted(b)
如果有重复并且列表可能有混合类型,并且所有类型都是可散列的:
collections.Counter(a) == collections.Counter(b)
如果有重复,列表可能有混合类型,并且某些元素可能不是可散列的(必须有更好的方法来做到这一点,但我想出的是把每个元素变成一个元组,用字符串表示类型,后跟值):
keyfunc = lambda x: (str(type(x)), x) sorted(a, key=keyfunc) == sorted(b, key=keyfunc)
于 2012-11-05T22:25:06.510 回答
0
>>> all(x in b for x in a)
于 2012-11-05T22:21:45.447 回答