【问题标题】:Create a new list in a list of lists that has the same length as the longest one在与最长列表长度相同的列表列表中创建一个新列表
【发布时间】:2018-10-06 23:50:18
【问题描述】:

如果我有以下列表:

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

我在 Pandas 的数据框中使用这些数据。也许 pandas 可以帮助我实现我的目标?

【问题讨论】:

  • 为什么要在倒数第二个位置插入新列表以及如何构造新列表?
  • data.insert(2, max(data, key=len).copy())?
  • @HenryWoody 它是正确的列位置。它正在导出到 csv 文件。这个新列表中的元素无关紧要。它可以是相同的值。

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


【解决方案1】:

首先获取最长的子列表,然后创建一个该长度的新列表(通过复制它或您需要的任何东西)。然后将新列表插入data 中您想要的位置。

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

longest_sublist = max(data, key=len)
new_list = longest_sublist.copy()

desired_position = 2
data.insert(desired_position, new_list)

之后,data 变为:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      其实很简单

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多