python - 在列表中查找不同类型的公共元素

时间:2012-07-05 22:38:48

标签: python algorithm set

我想知道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 个答案:

答案 0 :(得分:1)

>>> a = [1,2,[3,4]]
>>> b = [1,3,[3,4]]
>>> [x for x in a if x in b]
[1, [3, 4]]

答案 1 :(得分:1)

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

>>> A = [1,2,[3,4]]
>>> B = [1,3,[3,4]]
>>> [a for a in A if a in B]
[1, [3, 4]]

答案 2 :(得分:1)

在这种特殊情况下,使用repr 可以使列表成员可以使用{<1}}:

>>> 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]]

答案 3 :(得分: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的答案......