Ich habe eine Liste der Liste (tableData) und ich möchte eine neue Liste (cloneTable), die die Länge jeder Zeichenfolge in der ursprünglichen Liste ausgibt, so kann ich die längste Zeichenfolge mit der Funktion finden längsteString. Ich möchte auch die Werte in der ursprünglichen Liste beibehalten. Das Problem ist, dass nach der Ausführung meiner Funktion die ursprüngliche Liste in Längen konvertiert wurde.Listenwerte versehentlich in Funktion ersetzt
Ich bin der Code sicher besser sein kann (ich lerne immer noch), aber ich möchte auch verstehen, warum es dieses Problem ist. Ich habe tableData nicht zugewiesen. Ich übergebe die Werte aus tableData, um sie cloneTable zuzuordnen. Danke für die Hilfe!
#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])
Eine fortschrittlichere Lösung könnte so etwas wie '[max (l, key = len) für l in Table] sein' Dies nutzt die [max] (https: //docs.python.org/3/library/functions.html#max) Funktion und ein Konzept namens [Liste Verständnis] (http://www.secnetix.de/olli/Python/list_comprehensions.hawk) –