0

我想知道 Python 是否提供了任何方便的功能来查找不同列表中的常见元素?

假设我有两个列表,

[1,2,[3,4]] and [1,3,[3,4]]

函数的理想输出应该是 [1,[3,4]],一个包含公共元素的列表。困扰我的是嵌套列表[3,4]。没有它,我可以简单地做 set(list1)&set(list2) ,这个问题将完全重复,知道这个问题可能看起来很少重复Find non-common elements in lists。当我用上面的例子尝试同样的事情时,我收到一条错误消息:

TypeError: unhashable type: 'list'

知道如何处理吗?提前致谢!!

4

4 回答 4

1
>>> a = [1,2,[3,4]]
>>> b = [1,3,[3,4]]
>>> [x for x in a if x in b]
[1, [3, 4]]
于 2012-07-05T22:43:44.860 回答
1

IDLE 会话的以下命令和输出应该有助于解决您的问题:

>>> A = [1,2,[3,4]]
>>> B = [1,3,[3,4]]
>>> [a for a in A if a in B]
[1, [3, 4]]
于 2012-07-05T22:43:49.073 回答
1

在这种特殊情况下,可以使用以下方法使列表的成员可散列repr

>>> a = [1,2,[3,4]]
>>> b = [1,3,[3,4]]
>>> a_set = set(repr(x) for x in a)
>>> [x for x in b if repr(x) in a_set]
[1, [3, 4]]
于 2012-07-05T22:50:17.353 回答
0

您可以作弊并创建一个辅助函数(取决于您的 Python 版本):

import collections

a = [1,2,[3,4]]
b = [1,3,[3,4]]

def helper(item):
    for i in item:
        if not isinstance(i, collections.Hashable):
            yield tuple(i)
        else:
            yield i

print set(helper(a)) & set(helper(b))

但我喜欢 MRAB 的回答...

于 2012-07-05T22:51:51.410 回答