获取列表列表的单个元素

时间:2012-08-14 14:07:44

标签: python

  

可能重复:
  Flatten (an irregular) list of lists in Python

我在python中有一个列表,如

l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]

我想使用一个集来获取所有唯一值,但这会失败

set(l)

TypeError: unhashable type: 'list'

所以有人帮忙吗?想要使用列表列表等等THX

2 个答案:

答案 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方法可以更有效地使用大型列表。