如何解决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]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。