Python 如何从长度不同的子列表创建列表列表

Python 如何从长度不同的子列表创建列表列表,python,python-3.x,list-comprehension,nested-loops,sublist,Python,Python 3.x,List Comprehension,Nested Loops,Sublist,我是python的初学者,我有这个问题,我希望有人能帮我解决 首先,我有一个长度不同的子列表 输入: temp_list=[[87.33372], [86.30815, 300.0], [96.31665, 300.0]] 我试图创建一个新的列表列表,其中子列表由每个列表子列表中相同索引的项组成,我希望这听起来不会太复杂 也许这会让事情变得更清楚一点 期望输出: [[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\u 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]]

您已经有一个循环,只需要第二个循环
这不是世界上最干净的代码,但它可以做到,您首先计算最大长度,它基本上是返回的列表将拥有的列表数量,创建一个返回列表(一个空列表列表),然后在需要时追加每个项

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.30815300.0]、[96.31665300.0]]
新列表=[]
#在每个列表上循环
对于临时列表中的项目:
#对于子列表中的每个项,获取其索引和值。
对于枚举中的i、v(项目):
#如果索引大于新列表的长度,请添加新的子列表
如果i>=len(新列表):
新增列表。追加([]))
#在索引(列)位置添加值
新列表[i]。追加(v)
打印(新列表)
输出

[[87.33372,86.30815,96.31665],[300.0300.0]]

非常感谢您!这正是我想要的。对于我来说,考虑到我缺乏python专业知识,这是最具可读性的解决方案。这个解决方案对我来说更高级一些,但一旦我对列表理解更加熟悉,我将重新讨论。非常感谢。