2017-03-15 36 views
0

我有一個字符串列表的列表,我想獲得每個內部列表上最大的字符串並將它們存儲到另一個列表中。例如:如何比較Python列表中的元素

tableData = [['apples','bananas','oranges','cherries'], 
      ['Alice','Bob','Carol','David'], 
      ['dogs','cats','moose','goose']] 

widths = [0] * len(tableData) 

我想在寬度來存儲[0],在資料表[0]的最長的字符串的寬度,在寬度的[1]的最長的字符串的在資料表寬度[1],和等等。我如何比較單詞的長度以獲得更大的?

我認爲唯一的辦法是這樣做的:

for f in range(len(tableData)): 
    for c in range(len(tableData[1])): 
     max = len(tableData[f][c]) 
     if max < len(tableData[f][c+1]): 
      max = len(tableData[f][c+1]) 
    widths[f] = max 
+1

你試過了什麼?你的困難在哪裏? –

回答

2
widths = [len(max(lst, key=len)) for lst in tableData] 

對於您的名單清單名爲tableData ,這給:

[8, 5, 5] 

說明:

[max(lst, key=len) for x in tableData]爲您提供了包含每個嵌套列表的最長的字符串列表。然後使用len()獲得這些長度。

相同的結果可通過以下步驟實現:

widths = [len(sorted(lst, key=len)[-1]) for lst in tableData] 

sorted(lst, key=len)將每個列表中的元素由長度,從最短到最長的排序。然後使用[-1]可以獲得每個列表的最後一個值,即最長的字符串。然後len()將計算它們的長度。

+0

這工作得很好,非常感謝。我並不知道max()函數,因此我正在進行研究以瞭解更多信息。 – Xcecution

+1

沒問題。這裏的重要部分是[max(lst_of_strings)](https://docs.python.org/3.6/library/functions.html#max)按字典順序比較字符串,即按照字母順序排序時返回最後一個字符串。因此,爲了得到最長的字符串,我們需要'max(lst_of_strings,key = len)'。爲了獲得它們的實際長度,可以使用'len()'。 –

-1

不要擔心初始化的寬度。 List comprehensions在這裏是你的朋友。

# creates a list of lists of word lengths 
lengths_of_words = [[len(word) for word in x] for x in tableData] 

# finds the max length for each list 
widths = [max(y) for y in lengths_of_words] 

也可以縮短到

widths = [max([len(word) for word in x]) for x in tableData] 

這是舊的,不正確的答案,如果人們想從我的錯誤中學習:

widths = [len(max(x)) for x in tableData] 
+0

您正在查找列表中'max'項的長度,在這種情況下,'oranges'因o比其他開頭字母更高。當長度最長的字符串是櫻桃。 (在第一個列表中) – Wright

+0

這是事實,這是真的。將編輯 – Charlie

+0

感謝您的幫助@Wright,這就是我得到的充電,就像我知道的東西 – Charlie