【问题标题】:In Python how to find max length of inner list in a 2D list? [duplicate]在 Python 中,如何在 2D 列表中找到内部列表的最大长度? [复制]
【发布时间】:2018-12-29 10:10:52
【问题描述】:

我经常创建一个内部列表长度不同的列表列表,例如表示一堆不同长度的句子

[['Hello', 'world'], ['how','are','you'], ['have','a','good','day']]

我需要将这些转换为 numpy 矩阵。为了使所有内部列表的长度相同,我在末尾填充了一个虚拟元素,并使所有内部列表都等于最大长度。

有没有找到内部列表最大长度的紧凑方法?

我通常通过编写一个 for 循环并跟踪最大长度来做到这一点,但我经常这样做,以至于我觉得需要更好的方法。

【问题讨论】:

  • 写一个函数怎么样?
  • numpy 怎么样?该列表包含字符串,而不是整数
  • 没有明确计算最长的填充:np.array(list(itertools.zip_longest(*alist, fillvalue='dummy'))).T
  • @U9-Forward 对不起,我忘了说我使用像 GloVe 这样的词嵌入来用向量替换每个词,这就是我使用 numpy 的地方。

标签: python numpy


【解决方案1】:

你可以这样做:

max([len(item) for item in A])

【讨论】:

  • 作为生成器比使用中间列表更好
【解决方案2】:

使用max函数:

max(your_list, key=len)

您将获得最长的列表,如果您需要实际长度,只需再次使用len

len(max(your_list, key=len))

这里有live example

【讨论】:

    【解决方案3】:

    使用mapmax,您可以轻松找到子列表的最大长度

    >>> max(map(len, lst))
    4
    

    【讨论】:

      【解决方案4】:

      然后订购:

      >>> A=[['Hello', 'world'], ['how','are','you'], ['have','a','good','day']]
      >>> sorted(A,key=len)
      [['Hello', 'world'], ['how', 'are', 'you'], ['have', 'a', 'good', 'day']]
      >>> 
      

      【讨论】:

        【解决方案5】:

        要将列表列表转换为 numpy 数组,您可以尝试以下 sn-p。第四行填充您的数据,第五行创建 numpy 数组。

        import numpy as np
        data=[['Hello', 'world'], ['how','are','you'], ['have','a','good','day']]
        max_length = max(map(len, data))
        [e1.extend(['']*(max_length - len(e1))) for e1 in data]
        np_data=np.array(data)
        

        【讨论】:

        • 不要将列表理解用于副作用。
        猜你喜欢
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 2022-01-05
        相关资源
        最近更新 更多