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

时间:2011-07-07 17:47:54

标签: python list nested

  

可能重复:
  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] ]

即我想在列表中对有序元素进行分组,并将它们保存在有序列表中。我怎么能这样做?

由于

8 个答案:

答案 0 :(得分:42)

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

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:5)

类似的东西:

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

答案 3 :(得分:3)

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

列出对胜利的理解:)

答案 4 :(得分:1)

基于the answer from Fred Foo,如果您已经在使用numpy,则可以使用reshape来获取二维数组而不复制数据:

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

答案 5 :(得分:0)

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

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] ]

答案 6 :(得分:0)

以下功能将原始上下文扩展为包括列表结构的任何所需列表:

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]]

答案 7 :(得分:0)

我希望这会对您有所帮助。它将列表转换为列表列表

list1 = [i对于范围(0,8 + 1)中的i,嵌套= []对于list1中的i:如果len(嵌套)!= 0:如果i%3!= 0:nested.append([i ])else:nested [len(nested)-1] .append(i)else:nested.append([i])print(nested