可能重复:
Flatten (an irregular) list of lists in Python获取列表名单列表的单一元素
我有一个像
l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
我想用一组在Python列表获取所有的唯一值,但这不成功
set(l)
TypeError: unhashable type: 'list'
那么有人帮忙吗?想要使用列表等列表的设置THX
可能重复:
Flatten (an irregular) list of lists in Python获取列表名单列表的单一元素
我有一个像
l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
我想用一组在Python列表获取所有的唯一值,但这不成功
set(l)
TypeError: unhashable type: '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))
是的,这很有用,非常感谢你! – user1598203 2012-08-14 14:18:38
如何对这种做法,你拼合首先列出,然后再对其应用设置操作。
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方法将具有非常大的名单更有效地工作比这list comprehension基础的方法。
你需要的是[扁平化列表](http://stackoverflow.com/questions/2158395/flatten-an-irregular-list-of-lists-in-python) – StoryTeller 2012-08-14 14:12:30
为什么你有不均匀的嵌套数据? – Julian 2012-08-14 14:15:10
非常感谢!该代码适用于使用set! Thx – user1598203 2012-08-14 14:17:06