Создайте новый список в списке списков, длина которого совпадает с самой длинной - PullRequest
0 голосов
/ 07 октября 2018

Если у меня есть следующий список списков:

data = [[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6,7]]

Есть ли способ создать список между вторым и третьим списком (желательно в любой позиции), длина которого равна длине самого длинного списка?в этом списке списков?

Например, в моем случае создайте список между вторым и третьим / последним списком, который имеет ту же длину, что и последний (поскольку это самый длинный список с длиной 7):

data = [[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6,7], [1,2,3,4,5,6,7]]

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

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Сначала получите длину самого длинного подсписка, затем создайте новый список этой длины.Затем вставьте новый список в data в нужной вам позиции.

data = [[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6,7]]

max_length = max(len(sublist) for sublist in data)
new_list = [1] * max_length

desired_position = 2
data.insert(desired_position, new_list)

После чего data станет:

[[1, 2, 3], [1, 2, 3, 4, 5], [1, 1, 1, 1, 1, 1, 1], [1, 2, 3, 4, 5, 6, 7]]
0 голосов
/ 07 октября 2018

Это на самом деле довольно просто

def insert_sublist(list_of_lists, position):
    ideal_sized_list = list(range(max([len(i) for i in list_of_lists])))
    return list_of_lists[:position]+[ideal_sized_list]+list_of_lists[position:]
0 голосов
/ 07 октября 2018

Поскольку никаких конкретных элементов для нового списка не было предоставлено, вы можете просто сделать копию самого длинного подсписка и затем insert в data

data = sorted(data, key=len) # for when lists are not organized by len

new = ['x']*len(data[-1])
data.insert(-1, new)
# [[1, 2, 3], [1, 2, 3, 4, 5], ['x', 'x', 'x', 'x', 'x', 'x', 'x'], [1, 2, 3, 4, 5, 6, 7]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...