列表值在函数内部被意外替换

List values accidentally replaced inside function

我有一个列表列表 (tableData),我想 return 一个新列表 (cloneTable),它输出原始列表中每个字符串的长度,这样我就可以使用函数找到最长的字符串最长的字符串。我还想保留原始列表中的值。问题是我的函数运行后,原来的List已经转换为长度了。

我相信代码可以做得更好(我还在学习),但我也想了解为什么会出现这个问题。我没有分配 tableData 我正在传递 tableData 的值以分配给 cloneTable。谢谢您的帮助!

#A list of lists
tableData = [
    ['apples','oranges','cherries','banana'], #6,7,8,6
    ['Alice','Bob','Carol','David'], #5,3,5,5
    ['dogs','cats','moose','goose'], #4,4,5,5
    ['car','train','helicopter','plane'] #3,5,10,5
]

#longestString function finds the longest string in each list of list
def longestString(table):
    cloneTable = []
    output = []

    for v1 in range(len(table)):
        cloneTable = cloneTable + [table[v1]]

    for v1 in range(len(cloneTable)):
        for v2 in range(len(cloneTable)):
            cloneTable[v1][v2] = len(cloneTable[v1][v2])

        cloneTable[v1].sort()

    for v1 in range(len(cloneTable)):
        output = output + [cloneTable[v1][-1]]

    return output

##################################################################

for v1 in range(len(tableData)): #returns the list - OK
    print(tableData[v1])

print(longestString(tableData)) #returns the longest strings - OK

for v1 in range(len(tableData)): #returns a list of string lengths - Not OK
    print(tableData[v1])

不确定为什么将列表命名为 cloneTable,如果它只是参考 copy/assignment。

如果你真的想克隆它,你应该对你的列表进行深拷贝。交叉 python 解决方案涉及使用 copy.deepcopy:

import copy
def longestString(table):
    cloneTable = []
    output = []

    cloneTable = copy.deepcopy(table)
    ...