当前位置: 首页 > 编程笔记 >

Python嵌套列表转一维的方法(压平嵌套列表)

燕航
2023-03-14
本文向大家介绍Python嵌套列表转一维的方法(压平嵌套列表),包括了Python嵌套列表转一维的方法(压平嵌套列表)的使用技巧和注意事项,需要的朋友参考一下

前一段去云英面试,技术官很”不厚道“了问了一个非常简单的问题:如何将多维列表转化了一维的?当时虽然想到了使用迭代或者列表生成式可以做到,但是可以没能可行的代码,回来后一顿后悔。

对于规范的且嵌套维度较低的多维列表,python中有很多方法可以实现:

a=[[1,2],[3,4],[5,6]]
print [j for i in li for j in i]
#or
from itertools import chain
print list(chain(*a))
#or
import itertools
a = [[1,2,3],[4,5,6], [7], [8,9]]
out = list(itertools.chain.from_iterable(a))
#or
a=[[1,2],[3,4],[5,6]]
t=[]
[t.extend(i) for i in a]
print t
#or
a=[[1,2],[3,4],[5,6]]
print sum(a,[])
#or
reduce(lambda x, y: x+ y, a)

对于复杂的多维嵌套列表就需要使用一些复杂的方法:

#递归的方法比较容易理解
def expand_list(nested_list):
  for item in nested_list:
    if isinstance(item, (list, tuple)):
      for sub_item in expand_list(item):
        yield sub_item
    else:
      yield item
      
#在stackoverflow看到大牛的列表生成式版本
func = lambda x: [y for l in x for y in func(l)] if type(x) is list else [x]
#生成式的方法还有很多,可以自行摸索

对于使用python2.X的童鞋,还可以使用flatten函数来做:

>>> d=[1,2,3,[4,5],[6,7,[8,9]]]
>>>from compiler.ast import flatten
>>>flatten(a)
[1, 2, 3, 4, 5, 6,7,8,9]

其实上边列举的方法仅仅是冰山一角,大海下的冰山就等这童鞋们自行去寻找挖掘了。

以上这篇Python嵌套列表转一维的方法(压平嵌套列表)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 谁能告诉我如何在嵌套列表中调用索引? 通常我只写: 但是如果我有一个带有嵌套列表的列表,如下所示: 我想分别浏览每个索引? 问题答案: 如果您确实需要索引,则可以按照内部列表再次执行以下操作: 但是遍历列表本身是更pythonic的: 如果您确实需要索引,也可以使用:

  • 问题内容: 我该如何打开一个列表,例如: 进入列表列表,例如: 即我想将有序元素分组在列表中,并将其保留在有序列表中。我怎样才能做到这一点? 谢谢 问题答案: 假设data_list的长度是三的倍数

  • 问题内容: 我在bleow显示的代码中使用嵌套列表在Python中遇到了一些问题。 基本上,我有一个包含所有0值的2D列表,我想循环更新列表值。 但是,Python不会产生我想要的结果。我对range()Python列表索引有误解吗? 我预期的结果是: 但是Python的实际结果是: 这里发生了什么? 问题答案: 问题是由于python选择通过引用传递列表这一事实引起的。 通常,变量是按“值”传递

  • 问题内容: python初学者在这里。 我有2个要合并的嵌套列表: 我正在寻找的输出是: 可以在没有任何外部库的情况下完成此操作吗?注意:len(list1)= len(list2) 问题答案: 使用函数的功能并列出理解:

  • 本文向大家介绍Markdown 嵌套列表,包括了Markdown 嵌套列表的使用技巧和注意事项,需要的朋友参考一下 示例 列表可以嵌套 八个空间 十二个空格 四个空间 然后回来

  • 问题内容: 我有这个嵌套列表: 现在,我要做的是将列表中的每个元素转换为float。我的解决方案是这样的: 但这可以使用嵌套列表理解来完成吗? 我所做的是: 但是结果是一堆100的总数为2400。 任何解决方案,解释将不胜感激。谢谢! 问题答案: 这是使用嵌套列表理解的方法: 这将为你提供一个列表列表,与你开始时的列表类似,只是使用浮点数而不是字符串。如果你想要一个固定列表,则可以使用。

  • 问题内容: 我正在尝试将嵌套列表转换为2d数组。 我想把它做成一个。我尝试了以下方法: 有没有可行的方法?请注意,直到运行时我才知道列表的大小,并且列表可能会锯齿。 问题答案: 没有简单的内置方法可以执行所需的操作,因为您只能返回存储在list中的元素数组,在您的情况下也可以是list。 最简单的解决方案是创建二维数组,并用每个嵌套列表的结果填充它。 (如果您像使用Alex一样将Java8与流一起

  • 问题内容: 我有一个嵌套列表,如何将其转换为字典 字典应阅读以下内容 我试图将其更改为Pandas DataFrame并将其转换为字典。但是我正在寻找从列表到字典的直接转换 将感谢您的帮助。在Python 3中期待答案 问题答案: 一种方法是使用,它依次遍历每个列表的第 i 个元素: 按照@Jean-FrançoisFabre的建议,通过打开包,可确保您的值是列表。 结果 另一种方法是使用: