Python列表中子列表中第j个项的最大长度

2024-04-25 20:52:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单,例如:

x = [['aaa', 'bb','ccc'], ['ophkn','h','aa']]

假设len(x[i])对于i(上例中的0和1)的所有有效值都是相同的。

现在,我需要构造一个列表,其中包含x的每个子列表中第j项的最大长度。也就是说,我需要知道以下几点:

max(len(x[i][j]))对于固定值ji的所有值

因此,在我上面的例子中,我将产生如下列表:

[5, 2, 3]

因为

max(len('aaa'),len('ophkn')) --> 5
max(len('bb'),len('h'))      --> 2
max(len('ccc'),len('aa'))    --> 3

我试图找到这些最大值的原因是,我可以打印一个充满空间的表,例如:

aaa    bb  ccc
ophkn  h   aa

所以,如果有人有一个优雅的方式打印x,使它在管状格式对齐,请分享!你知道吗


Tags: 列表len格式方式空间原因max例子
3条回答

你可以使用拉链和一个splat,例如:

x = [['aaa', 'bb','ccc'], ['ophkn','h','aa']]

maxlens = map(len, (max(el, key=len) for el in zip(*x)))
# [5, 2, 3]

然后从结果中使用适当的str.format。你知道吗

在生成器表达式上使用max()。例如,给定j等于1:

>>> x = [['aaa', 'bb','ccc'], ['ophkn','h','aa']]
>>> j = 1
>>> max(len(i[j]) for i in x)
2

或者,循环遍历j的所有值:

>>> for j in xrange(3):
...     print max(len(i[j]) for i in x)
...
5
2
3

使用zip()是另一种方法:

>>> [max(len(a), len(b)) for a, b in zip(*x)]
[5, 2, 3]

正如Robb在评论中指出的,对于任意数量的行,一种通用而有效的方法是:

[max(len(b) for b in a) for a in zip(*x)]

相关问题 更多 >