2017-08-26 23 views
0

我有一個列表(tableData)列表,我想返回一個新的List(cloneTable),它輸出原始列表中每個字符串的長度,以便我可以使用該函數找到最長的字符串longestString。我也想保留原始列表中的值。問題是,我的函數運行後,原始列表已被轉換爲長度。函數內部意外替換的列表值

我相信代碼可以更好(我還在學習),但我也想明白爲什麼有這個問題。我沒有分配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]) 
+0

更先進的解決方案可能[用於升在資料表最大值(1,1-鍵= LEN)]是這樣''這利用了[MAX](HTTPS的: //docs.python.org/3/library/functions.html#max)函數和一個名爲[list comprehension]的概念(http://www.secnetix.de/olli/Python/list_comprehensions.hawk) –

回答

0

不知道爲什麼你打電話給你的列表cloneTable,如果它是你正在做的只是一個參考複製/分配。

如果您真的想克隆它,您應該對列表執行深層複製。橫蟒解決方案包括使用copy.deepcopy

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

    cloneTable = copy.deepcopy(table) 
    ... 
+0

切片符號也工作'表[:]' – Soviut

+1

@Soviut錯誤,我們正在處理一個嵌套列表。 –

+0

啊,你是對的,我錯過了由於縮進。我將在問題中澄清這一點。 – Soviut