我想知道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'
知道怎么处理吗? 在此先感谢!!
答案 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的答案......