列表值在函数内部被意外替换
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)
...
我有一个列表列表 (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)
...