Python中如何找到一个二维列表中内部列表的最大长度?

9
我经常创建一个包含不同长度内部列表的列表,比如表示一堆长度不同的句子。
[['Hello', 'world'], ['how','are','you'], ['have','a','good','day']]

我需要将这些转换为numpy矩阵。为了使所有内部列表具有相同的长度,我在末尾填充一个虚拟元素,并使所有内部列表等于最大长度。
有没有一种简洁的方法来查找内部列表的最大长度?
通常我会编写一个for循环并跟踪最大长度,但我经常这样做,所以我需要更好的方法。

写一个函数怎么样? - Ebram Shehata
这个 numpy 怎么样?列表包含字符串,而不是整数。 - U13-Forward
不需要显式计算最长长度的填充:np.array(list(itertools.zip_longest(*alist, fillvalue='dummy'))).T - hpaulj
@U9-Forward 抱歉,我忘了提到我使用词嵌入(如GloVe)将每个单词替换为向量,这就是我使用numpy的地方。 - Rakesh K
5个回答

15

使用 max 函数:

max(your_list, key=len)

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

len(max(your_list, key=len))

这里有一个实时示例


4
使用mapmax函数,可以轻松找到子列表的最大长度。
>>> max(map(len, lst))
4

2
您可以按照以下方式进行操作:
max([len(item) for item in A])

使用生成器比使用中间列表更好。 - Netwave

2

并下订单:

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

-1

如果你想将列表嵌套转换为numpy数组,可以尝试以下代码片段。第四行填充数据,第五行创建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)

3
不要使用列表推导式来产生副作用。 - juanpa.arrivillaga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接