Как создать список списков из подсписков различной длины - PullRequest
2 голосов
/ 16 марта 2020

Я новичок в python, и у меня есть проблема, с которой я надеюсь, что кто-то может мне помочь.

сначала у меня есть список подсписков различной длины

input:

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

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Я бы порекомендовал тот же ответ, что и Остин, и я предлагаю его наиболее чистый, но более подробный вариант, который должен легко проиллюстрировать, что происходит в коде, вы можете использовать следующее.

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]]
1 голос
/ 16 марта 2020

Вы можете использовать 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]]
0 голосов
/ 16 марта 2020

У вас уже есть один l oop, вам просто понадобится секунда
Это не очищенный код в мире, но он подойдет, вы сначала рассчитываете максимальную длину, которая в основном равна числу списков, которые return_list должен был создать список возврата (список пустых списков), а затем добавлять каждый элемент при необходимости

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...