5

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

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

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

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

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

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

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

4

3 回答 3

8

该表达式'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是一个数字(最长列表的长度);询问该数字的长度不是您想要的。

于 2012-09-23T08:56:40.140 回答
4

问题出在这条线上:

if row < len(maxSS7):

您正在将list rowinteger len(maxSS7)进行比较。它将评估False每次。将其更改为:

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

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

于 2012-09-23T08:57:23.530 回答
1

你可以这样做,

maxLen = max(map(len, arr))
[row.extend(['null']*(maxLen - len(row))) for row in arr]
于 2020-04-28T09:37:51.010 回答