J'ai une liste de liste (tableData) et je veux retourner une nouvelle liste (cloneTable) qui affiche la longueur de chaque chaîne dans la liste d'origine afin que je puisse trouver la chaîne la plus longue en utilisant la fonction longestString. Je veux aussi garder les valeurs dans la liste originale. Le problème est qu'après l'exécution de ma fonction, la liste d'origine a été convertie en longueurs.Liste des valeurs accidentellement remplacées dans la fonction
Je suis sûr que le code peut être meilleur (j'apprends encore) mais je veux aussi comprendre pourquoi il y a ce problème. Je n'ai pas assigné tableData Je passe les valeurs de tableData à assigner à cloneTable. Merci pour l'aide!
#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])
Une solution plus avancée pourrait être quelque chose comme '[max (l, key = len) pour l dans TableData]' Cela profite des [max] (https: //docs.python.org/3/library/functions.html#max) fonction et un concept appelé [list comprehension] (http://www.secnetix.de/olli/Python/list_comprehensions.hawk) –