我有一个嵌套列表,其中包含填充字符串的列表.我想要做的是让这个嵌套中的每个列表与该嵌套中最长的可用列表的长度相同.这听起来很容易,但我的尝试失败了(我对编程完全不熟悉)而且我找不到一个足以解决我的问题的回答问题.
首先,我确定最长列表的持续时间:
maxSS7 = max(len(i) for i in ssValues7))
Run Code Online (Sandbox Code Playgroud)
然后,如果它与最长列表的长度不同,我使用for循环将每个列表扩展一定量的"null":
for row in ssValues7:
if row < len(maxSS7):
row.extend(['null' * (len(maxSS7) - len(row))])
Run Code Online (Sandbox Code Playgroud)
我将行扩展'null'*最长列表和当前列表之间的差异.没有错误发生,但不幸的是它似乎对我的嵌套列表没有任何作用.
有人可以告诉我我的错误吗?任何帮助将不胜感激.
表达式'null' * (len(maxSS7) - len(row))创建一个可能非常长的字符串.
使用
row.extend('null' for _ in xrange(maxSS7 - len(row)))
Run Code Online (Sandbox Code Playgroud)
代替.生成器表达式允许您避免仅为了扩展而创建额外的列表对象row.
>>> ['null' * 2]
['nullnull']
>>> ['null' for _ in xrange(2)]
['null', 'null']
Run Code Online (Sandbox Code Playgroud)
但是.extend呼叫本身永远不会到达,因为你的if声明正在测试错误的东西; 将其更改为:
if len(row) < maxSS7:
Run Code Online (Sandbox Code Playgroud)
maxSS7是一个数字(最长列表的长度); 要求这个数字的长度不是你想要的.
问题在于该行:
if row < len(maxSS7):
Run Code Online (Sandbox Code Playgroud)
您正在将列表 row与整数 len(maxSS7)进行比较。它将评估False每次。将其更改为:
maxLen = max(map(len, myList))
for row in myList:
if len(row) < maxLen:
row.extend(...)
Run Code Online (Sandbox Code Playgroud)
Martijn Peters在他的回答中指出了您的代码的另一个问题。