首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表列表的列表展平为列表列表

将列表列表的列表展平为列表列表
EN

Stack Overflow用户
提问于 2015-10-27 04:47:08
回答 4查看 1.4K关注 0票数 3

我已经搜索过如何展平列表列表(例如:Making a flat list out of list of lists in Python),但我发现没有一个解决方案可以将列表列表展平为列表列表。

我有:

代码语言:javascript
复制
my_list = [ [ [1,2,3],[4,5] ], [ [9],[8,9,10],[3,4,6] ], [ [1] ] ]

我想要:

代码语言:javascript
复制
my_list = [ [1,2,3,4,5], [9,8,9,10,3,4,6], [1] ]

这个解决方案也应该适用于浮点数列表。有什么建议吗?

EN

回答 4

Stack Overflow用户

发布于 2015-10-27 04:51:59

如果我们应用this answer的逻辑,它不应该只是:

代码语言:javascript
复制
In [2]: [[item for subsublist in sublist for item in subsublist] for sublist in my_list]
Out[2]: [[1, 2, 3, 4, 5], [9, 8, 9, 10, 3, 4, 6], [1]]

类似地,通过itertools.chain()

代码语言:javascript
复制
In [3]: [list(itertools.chain(*sublist)) for sublist in my_list]
Out[3]: [[1, 2, 3, 4, 5], [9, 8, 9, 10, 3, 4, 6], [1]]
票数 9
EN

Stack Overflow用户

发布于 2015-10-27 05:12:41

这是fl00r递归答案的一个由内到外的版本,它更符合OP的意图:

代码语言:javascript
复制
def flatten(lists,n):
    if n == 1:
        return [x for xs in lists for x in xs]   
    else:
        return [flatten(xs,n-1) for xs in lists]


>>> flatten(my_list,1)
[[1, 2, 3], [4, 5], [9], [8, 9, 10], [3, 4, 6], [1]]
>>> flatten(my_list,2)
[[1, 2, 3, 4, 5], [9, 8, 9, 10, 3, 4, 6], [1]]
票数 1
EN

Stack Overflow用户

发布于 2015-10-27 04:53:18

您可以使用这个递归子例程

代码语言:javascript
复制
def flatten(lst, n):
  if n == 0:
    return lst

  return flatten([j for i in lst for j in i], n - 1)

mylist = [ [ [1,2,3],[4,5] ], [ [9],[8,9,10],[3,4,6] ], [ [1] ] ]
flatten(mylist, 1)
#=> [[1, 2, 3], [4, 5], [9], [8, 9, 10], [3, 4, 6], [1]]
flatten(mylist, 2)
#=> [1, 2, 3, 4, 5, 9, 8, 9, 10, 3, 4, 6, 1]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33355299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档