You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为嵌套列表中的子列表填充空字符串以统一长度?

问题:统一嵌套列表子列表长度,不足部分用空字符串补全

给定一个包含不同长度子列表的嵌套列表,需要生成一个所有子列表长度一致的新嵌套列表,长度取原列表中子列表的最大长度,不足的位置用空字符串填充。

输入列表:

tableData = [['apples', 'oranges', 'cherries', 'banana'],
             ['Alice', 'Bob', 'Carol', 'David','Katherine'],
             ['dogs', 'cats', 'moose', 'goose']]

我的尝试与问题

先获取所有子列表的最大长度width,然后编写初始化列表的代码:

mytable = []
mytable2 = []
mytable3 = []
for i in range(len(tableData)):
    for j in range(width):
        if len(mytable) < width:
            mytable.append("")
        else:
            break
    mytable2.append(mytable)

接着尝试替换值,但找不到合适的条件阻止循环覆写:

for i in range(len(tableData)):
    for j in range(len(tableData[i])):
        if mytable[j] == "":
            mytable[j] = tableData[i][j]
        else:
            break
    mytable3.append(mytable)

最终得到的输出里所有子列表被同时覆写:

[['apples', 'oranges', 'cherries', 'banana', ''],
 ['apples', 'oranges', 'cherries', 'banana', ''], 
['apples', 'oranges', 'cherries', 'banana', '']]

问题原因与解决方案

问题根源

你所有的子列表都引用了同一个mytable对象,每次向mytable2或mytable3添加mytable时,只是把这个列表的引用存进去,而非创建新的副本。后续修改mytable内容时,所有引用它的子列表都会同步变化,最终导致所有子列表内容完全相同。

正确实现方式

步骤1:计算最大长度

先找出原列表中子列表的最大长度:

width = max(len(sublist) for sublist in tableData)

步骤2:逐个补全子列表

遍历每个子列表,复制原元素后补充空字符串到指定长度:

result = []
for sublist in tableData:
    # 复制原列表元素,避免修改原数据
    padded_sublist = sublist.copy()
    # 计算需要补充的空字符串数量,添加到列表末尾
    padded_sublist += [""] * (width - len(sublist))
    result.append(padded_sublist)

更简洁的列表推导式写法

可以用一行代码完成:

width = max(len(lst) for lst in tableData)
result = [lst + [""]*(width - len(lst)) for lst in tableData]

最终正确输出

[['apples', 'oranges', 'cherries', 'banana', ''],
 ['Alice', 'Bob', 'Carol', 'David', 'Katherine'],
 ['dogs', 'cats', 'moose', 'goose', '']]

内容的提问来源于stack exchange,提问作者Surya Kannan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:53:34