【发布时间】:2018-02-04 12:01:22
【问题描述】:
我有一个列表列表 (tableData),我想返回一个新列表 (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])
【问题讨论】:
-
更高级的解决方案可能类似于
[max(l, key=len) for l in tableData]这利用了max 函数和一个名为list comprehension 的概念