繁体   English   中英

如何通过添加列表来使列表列表中的所有列表具有相同的长度

[英]How to make all lists in a list of lists the same length by adding to them

我有一个嵌套列表,其中包含填充字符串的列表。 我想要做的是使这个嵌套中的每个列表的长度与该嵌套中最长的可用列表的长度相同。 这听起来很简单,但是我的尝试失败了(我对编程完全陌生)并且我找不到足以解决我的问题的已回答问题。

首先,我确定最长的列表有多长:

maxSS7 = max(len(i) for i in ssValues7))

然后,如果每个列表与最长列表的长度不同,我将使用 for 循环将每个列表扩展一定数量的“空”:

for row in ssValues7:
    if row < len(maxSS7):
        row.extend(['null' * (len(maxSS7) - len(row))])

我通过'null' * 最长列表和当前列表之间的差异来扩展行。 没有发生错误,但不幸的是它似乎对我的嵌套列表没有任何作用。

有人可以请教我我的错误吗? 任何帮助将不胜感激。

表达式'null' * (len(maxSS7) - len(row))创建一个可能很长的字符串。

采用

row.extend('null' for _ in xrange(maxSS7 - len(row)))

反而。 生成器表达式可让您避免创建额外的列表对象只是为了扩展row

>>> ['null' * 2]
['nullnull']
>>> ['null' for _ in xrange(2)]
['null', 'null']

但是.extend调用本身永远不会到达,因为你if语句正在测试错误的东西; 将其更改为:

 if len(row) < maxSS7:

maxSS7是一个数字(最长列表的长度); 问这个数字的长度不是你想要的。

问题出在这一行:

if row < len(maxSS7):

您正在将列表row整数len(maxSS7) 每次都会评估为False 将其更改为:

maxLen = max(map(len, myList))
for row in myList:
    if len(row) < maxLen:
        row.extend(...)

Martijn Peters在他的回答中指出了您的代码的另一个问题

你可以这样做,

maxLen = max(map(len, arr))
[row.extend(['null']*(maxLen - len(row))) for row in arr]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM