可能重复:
在 Python 中展平(不规则)列表列表
我在 python 中有一个列表,比如
l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
我想使用一个集合来获取所有唯一值,但这失败了
set(l)
TypeError: unhashable type: 'list'
所以有人帮忙吗?想要使用 set 和 list of list 等 THX
可能重复:
在 Python 中展平(不规则)列表列表
我在 python 中有一个列表,比如
l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
我想使用一个集合来获取所有唯一值,但这失败了
set(l)
TypeError: unhashable type: 'list'
所以有人帮忙吗?想要使用 set 和 list of list 等 THX
您需要先“展开”或展平嵌套结构,然后才能将其放入集合中。您可以为此使用生成器来保持对大型列表的效率:
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))
这种方法怎么样,在对其应用 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])
@MartijnPieters 使用生成器的方法比这种基于列表理解的方法更有效地处理非常大的列表。