在python中将列表转换为嵌套列表

Posted

技术标签:

【中文标题】在python中将列表转换为嵌套列表【英文标题】:Turning a list into nested lists in python 【发布时间】:2011-09-30 16:32:32 【问题描述】:

可能重复:How can I turn a list into an array in python?

我怎样才能打开一个列表,例如:

data_list = [0,1,2,3,4,5,6,7,8]

进入列表列表,例如:

new_list = [ [0,1,2] , [3,4,5] , [6,7,8] ]

即我想将列表中的有序元素分组并将它们保存在有序列表中。我该怎么做?

谢谢

【问题讨论】:

你在不到一小时前就问过了。 抱歉 - 我无法确定在您的问题上定义子组的标准。在您的示例中,所有数字都是“有序的” - 那么您是否想要有序元素和最大长度为 3 的子组?或者每个子组只有 3 长? @Sentinel:不严格重复,因为不涉及numpy。但也许足够接近。谢谢 这根本不是引用问题的重复。 listnumpy.array 的解决方案完全不同。 @Sentinel:你说得对,它很相似,但我现在需要使用列表而不是数组。当我使用上一个问题中的 np.reshape 方法恢复到一维数组时,我丢失了所有内部分组——我的数据不仅仅是 [1,2,3...],而是很多 3 元组。我需要一种不使用数组将组织重新组合成三部分的方法。我认为这个问题本身就很有用,并且与前一个问题有很大不同。 【参考方案1】:

您的原始列表中是否有任何类型的选择标准?

Python 确实允许您这样做:

new_list = []
new_list.append(data_list[:3])
new_list.append(data_list[3:6])
new_list.append(data_list[6:])

print new_list
# Output:  [ [0,1,2] , [3,4,5] , [6,7,8] ]

【讨论】:

FWIW,当您尝试概括描述的模式 OP 时,这不是很实用。谢谢 哦,我不知道 OP 是否想知道 Python 中是否可以嵌入列表,或者是否有办法将列表转换为一个列表。【参考方案2】:

类似:

map (lambda x: data_list[3*x:(x+1)*3], range (3))

【讨论】:

【参考方案3】:

这假设 data_list 的长度是三的倍数

i=0
new_list=[]
while i<len(data_list):
  new_list.append(data_list[i:i+3])
  i+=3

【讨论】:

【参考方案4】:

new_list = [data_list[x:x+3] for x in range(0, len(data_list) - 2, 3)]

列出获胜的理解:)

【讨论】:

【参考方案5】:

这将按照它们出现的顺序对每 3 个元素进行分组:

new_list = [data_list[i:i+3] for i in range(0, len(data_list), 3)]

如果不是你想要的,给我们一个更好的例子。

【讨论】:

我遇到了与上述问题类似的情况,您的代码运行完美!我一直在最后阶段挣扎。很高兴我能解决这个问题。【参考方案6】:

基于the answer from Fred Foo,如果你已经在使用numpy,你可以使用reshape得到一个二维数组而不复制数据:

import numpy
new_list = numpy.array(data_list).reshape(-1, 3)

【讨论】:

【参考方案7】:

以下函数扩展原始上下文以包含任何所需的列表结构列表:

def gen_list_of_lists(original_list, new_structure):
    assert len(original_list) == sum(new_structure), \
    "The number of elements in the original list and desired structure don't match"
        
    list_of_lists = [[original_list[i + sum(new_structure[:j])] for i in range(new_structure[j])] \
                     for j in range(len(new_structure))]
        
    return list_of_lists

使用上面的:

data_list = [0,1,2,3,4,5,6,7,8]
    
new_list = gen_list_of_lists(original_list=data_list, new_structure=[3,3,3])
# The original desired outcome of [[0,1,2], [3,4,5], [6,7,8]]

new_list = gen_list_of_lists(original_list=data_list, new_structure=[2,3,3,1])
# [[0, 1], [2, 3, 4], [5, 6, 7], [8]]

【讨论】:

【参考方案8】:

下面的更优化,也很简单。

data_list = [0,1,2,3,4,5,6,7,8]
result =[]
i=0
while i <(len(data_list)-2):
    result.append(data_list[i:i+3])
    i+=3
print(result)

**output**

[[0, 1, 2], [3, 4, 5], [6, 7, 8]]

【讨论】:

我修复了代码。很多错误。但是,我不确定这是否能解决问题。否决答案。 @JoeFerndz 我能知道你在这方面做了什么吗?你运行代码了吗? 因为我记得写了工作代码。你做了哪些改变?

以上是关于在python中将列表转换为嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中将字符串列表转换为字典列表[重复]

在R中将列表转换为数组

在python中将列表错误地转换为数据框[重复]

如何在 py4j 中将 Java 列表转换为 Python 列表

在python中将整数列表转换为范围

在 Python 中将类“方法”转换为列表