我在python中有一个列表,如
l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
我想使用一个集来获取所有唯一值,但这会失败
set(l)
TypeError: unhashable type: 'list'
所以有人帮忙吗?想要使用列表列表等等THX
答案 0 :(得分:4)
您需要先“展开”或展平嵌套结构,然后才能将其放入集合中。您可以使用生成器来保持大型列表的效率:
def flatten(lst):
for element in lst:
if isinstance(element, list):
for subelement in flatten(element):
yield subelement
else:
yield element
然后在列表l
上使用该生成器创建一个集合:
set(flatten(l))
答案 1 :(得分:1)
这种方法怎么样,在你对它应用set操作之前先将列表展平。
import collections
def flat_list(tlist):
if isinstance(tlist, collections.Iterable):
return [j for i in tlist for j in flat_list(i)]
else:
return [tlist]
然后:
myl=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
print set(flat_list(myl))
给出:
set([1, 2, 3, 4, 5, 7, 8])
与基于list comprehension的方法相比,使用生成器的@MartijnPieters方法可以更有效地使用大型列表。