如何从不同长度的子列表创建列表列表
How to create list of lists from sublists with varying length
我是 python 的初学者,我遇到了这个问题,希望有人能帮助我。
首先,我有一个不同长度的子列表列表
输入:
temp_list=[[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
我正在尝试创建一个新的列表列表,其中子列表由每个列表子列表中具有相同索引的项目组成,我希望这听起来不会太复杂。
也许这样会更清楚一些
期望的输出:
[[87.33372, 86.30815, 96.31665],[300.0, 300.0]]
我想到了这个公式,但我不确定如何实现它
x=0
new_list = [sublist[x][i],sublist[x+1][i]...]
您可以将 itertools.zip_longest
与解包结合使用,帮助您提取整个子列表的列:
from itertools import zip_longest
temp_list = [[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
result = [list(filter(lambda x: x is not None, x)) for x in zip_longest(*temp_list)]
# [[87.33372, 86.30815, 96.31665], [300.0, 300.0]]
你已经有一个循环你只需要第二个
这不是世界上干净的代码,但它会做,你首先计算最大长度,它基本上是 returned_list 将拥有的列表数,创建一个 return 列表(列表空列表 ) ,然后在需要时附加每个项目
temp_list=[[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
max_length = max([len(i) for i in temp_list])
returned_list = [[] for i in range(max_length)]
for item in temp_list:
for i in range(max_length):
try:
returned_list[i].append(item[i])
except IndexError as ie:
pass
我会推荐与 Austin 相同的答案,我建议它是最简洁的,但是作为一个更详细的替代方案,它应该很容易说明代码中发生的事情,您可以使用以下代码。
temp_list = [[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
new_list = []
#loop over each list
for items in temp_list:
#for each item in the sublist get its index and value.
for i, v in enumerate(items):
#If the index is greater than the length of the new list add a new sublist
if i >= len(new_list):
new_list.append([])
#Add the value at the index (column) position
new_list[i].append(v)
print(new_list)
输出
[[87.33372, 86.30815, 96.31665], [300.0, 300.0]]
我是 python 的初学者,我遇到了这个问题,希望有人能帮助我。
首先,我有一个不同长度的子列表列表
输入:
temp_list=[[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
我正在尝试创建一个新的列表列表,其中子列表由每个列表子列表中具有相同索引的项目组成,我希望这听起来不会太复杂。
也许这样会更清楚一些
期望的输出:
[[87.33372, 86.30815, 96.31665],[300.0, 300.0]]
我想到了这个公式,但我不确定如何实现它
x=0
new_list = [sublist[x][i],sublist[x+1][i]...]
您可以将 itertools.zip_longest
与解包结合使用,帮助您提取整个子列表的列:
from itertools import zip_longest
temp_list = [[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
result = [list(filter(lambda x: x is not None, x)) for x in zip_longest(*temp_list)]
# [[87.33372, 86.30815, 96.31665], [300.0, 300.0]]
你已经有一个循环你只需要第二个
这不是世界上干净的代码,但它会做,你首先计算最大长度,它基本上是 returned_list 将拥有的列表数,创建一个 return 列表(列表空列表 ) ,然后在需要时附加每个项目
temp_list=[[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
max_length = max([len(i) for i in temp_list])
returned_list = [[] for i in range(max_length)]
for item in temp_list:
for i in range(max_length):
try:
returned_list[i].append(item[i])
except IndexError as ie:
pass
我会推荐与 Austin 相同的答案,我建议它是最简洁的,但是作为一个更详细的替代方案,它应该很容易说明代码中发生的事情,您可以使用以下代码。
temp_list = [[87.33372], [86.30815, 300.0], [96.31665, 300.0]]
new_list = []
#loop over each list
for items in temp_list:
#for each item in the sublist get its index and value.
for i, v in enumerate(items):
#If the index is greater than the length of the new list add a new sublist
if i >= len(new_list):
new_list.append([])
#Add the value at the index (column) position
new_list[i].append(v)
print(new_list)
输出
[[87.33372, 86.30815, 96.31665], [300.0, 300.0]]