Python:更改列表列表的形状

问题描述

我要使用python转换此列表列表:

list_3_5 = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]

以不同的形状-由6个列表组成的列表,其中前3个新列表具有list_3_5中3个主列表中每个列表的前三个值,然后后3个新列表具有list_3_5中的其余值:

[[1,3],8],13],[4,[9,[14,15]]

任何帮助表示赞赏。

更新

对于更长的列表,此:

list2 = [list(range(1,34)),list(range(34,67)),list(range(67,100))]

list2b = [list2[i][:5] for i in range(0,len(list2))] + [
    list2[i][5:] for i in range(0,len(list2))
]

或这个

list2 = [list(range(1,100))]
list2b = list(range(2 * len(list2)))

for key,element in enumerate(list2):
    list2b[key] = element[:5]
    list2b[key + len(list2)] = element[5:]

为此(将我原来的3个列表(每个包含33个元素)修改为6个列表的列表,前三个列表每个包含5个元素,后三个每个包含28个元素):

[[1,[34,35,36,37,38],[67,68,69,70,71],...,33],[39,40,41,66],[72,73,74,... 99]]

但是我想要的是(对于这个示例,一个19个列表的列表,每个列表包含5个元素,最后一个列表,剩下的4个元素):

[[1,15],[16,17,18,19,20],....
 ....
 [91,92,93,94,95],[96,97,98,99]]

似乎是这样,但我不太了解如何针对我的情况进行修改reshape an irregular list in python

解决方法

这是带有double for循环的解决方案,适用于任意长度的列表:

list_3_5 = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
newlist = []

for element in list_3_5:
    newlist.append(element[:3])

for element in list_3_5:
    newlist.append(element[3:])    

newlist

Out: [[1,3],8],13],[4,[9,[14,15]]

但是等等!还有更多:

list_3_5 = [[1,15]]
newlist = list(range(2*len(list_3_5)))

for key,element in enumerate(list_3_5):
    newlist[key] = element[:3]
    newlist[key+len(list_3_5)] = element[3:]

newlist
[[1,15]]

下面的部分回答了问题的更新部分:

biglist = []
for i in list2:
    biglist = biglist + i
#Here we put all small lists in the given list into a big list
print(biglist)

#construct an empty list to save the result as we go:
newlist = []

#add sections of 5 to newlist
while len(biglist) >= 5:
    newlist.append(biglist[:5])
    biglist = biglist[5:]

#add the remaining part of biglist to the newlist:
newlist.append(biglist)
print(newlist)

输出为:

[[1,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35],[36,37,38,39,40],[41,42,43,44,45],[46,47,48,49,50],[51,52,53,54,55],[56,57,58,59,60],[61,62,63,64,65],[66,67,68,69,70],[71,72,73,74,75],[76,77,78,79,80],[81,82,83,84,85],[86,87,88,89,90],[91,92,93,94,95],[96,97,98,99]]
,

如果要使用通用代码来分隔前三个元素,请尝试以下操作:

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

尝试一下:

[list_3_5[0][:3],list_3_5[1][:3],list_3_5[2][:3],list_3_5[0][3:],list_3_5[1][3:],list_3_5[2][3:]]

输出:

[[1,15]]