提问人:Surya Kannan 提问时间:2/26/2023 最后编辑:Mathpdegeek497Surya Kannan 更新时间:2/26/2023 访问量:139
在嵌套列表中填充列表以使所有列表的长度一致
Padding lists inside nested list to make all of uniform length
问:
我正在尝试解决一个问题,即给定一个包含可变大小列表的嵌套列表,创建一个嵌套列表,该列表包含均匀长度等于给定嵌套列表中列表中最大长度的列表。追加空字符串作为填充。
输入列表:
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David','Katherine'],
['dogs', 'cats', 'moose', 'goose']]
这是我制作的列表,其中宽度是所有子列表中的最大值:
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', '']]
答:
0赞
Codist
2/26/2023
#1
查找子列表的最大长度。遍历子列表并相应地扩展它们:
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David','Katherine'],
['dogs', 'cats', 'moose', 'goose']]
_max = max(map(len, tableData))
for e in tableData:
e.extend([''] * (_max - len(e)))
print(tableData)
输出:
[['apples', 'oranges', 'cherries', 'banana', ''], ['Alice', 'Bob', 'Carol', 'David', 'Katherine'], ['dogs', 'cats', 'moose', 'goose', '']]
0赞
Mathpdegeek497
2/26/2023
#2
我会告诉你更好的方法。通读完整答案以了解代码和过程。我不会使用比您提供的代码片段中使用的函数更多的函数。 假设输入嵌套列表为
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David','Katherine'],
['dogs', 'cats', 'moose', 'goose']]
现在,让我们循环访问此嵌套列表,以查找此嵌套列表中列表的最大长度。
max_length = 0
for inside_list in tableData:
if len(inside_list) > max_length:
max_length = len(inside_list)
输出5
现在,只需遍历 tableData 中的列表,并找出它们比最大值短的程度。然后多次附加空字符串以将它们填充到均匀的长度。
for inside_list in tableData:
shorter = max_length - len(inside_list)
for i in range(shorter)
inside_list.append("")
运行此操作将创建最终列表,如下所示
tableData = [['apples', 'oranges', 'cherries', 'banana', ''],
['Alice', 'Bob', 'Carol', 'David', 'Katherine'],
['dogs', 'cats', 'moose', 'goose', '']]
评论
0赞
Surya Kannan
2/26/2023
谢谢。是的,最初的问题是向输入列表添加填充,但在尝试解决这个问题时,我发现我无法将值从列表复制到列表。有没有办法做到这一点?我尝试了嵌套的 for 循环,但它给了我帖子中提到的输出。
0赞
Mathpdegeek497
2/27/2023
为什么不能将值从一个列表复制到另一个列表?有几种方法,如切片,以及 python 中的深拷贝/浅拷贝概念来复制列表。你能更具体地说一下你不能做什么吗?
0赞
Surya Kannan
2/27/2023
我应该说覆盖而不是复制。我想从嵌套列表中获取值,并将它们插入到我已经在相同索引中创建的嵌套列表中。
0赞
Mathpdegeek497
2/27/2023
@SuryaKannan,我需要您用来执行此操作的代码。对我来说,这是一个非常简单的过程,我无法弄清楚你做错了什么。
0赞
Surya Kannan
2/27/2023
我不能在这里发布代码,但是在帖子中输出之前的最后一个代码片段是我正在尝试做的。 帖子中的输出就是我得到的。我试图从输入列表中获取值并插入到创建的列表中的相同索引中,但所有子列表都会同时被覆盖,如帖子中的输出所示,而不是一个接一个。
评论