在列表列表中创建一个与最长列表相同长度的新列表

时间:2018-10-06 23:50:18

标签: python python-3.x pandas list dataframe

如果我具有以下列表列表:

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 :(得分:2)

首先获取最长子列表的长度,然后创建该长度的新列表。然后将新列表插入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]]

答案 1 :(得分:1)

由于没有为新列表提供特定元素,因此您可以简单地复制最长的子列表,然后将其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]]

答案 2 :(得分:0)

它实际上很简单

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