2016-09-07 76 views
3

他們是(從列表的列表重新打印表)如何獲得在列表嵌套一個最大字符串長度

的後續問題我以前的文章中,我試圖噸得到下面的字符串最大值嵌套列表:

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

for i in tableData: 
    print(len(max(i))) 

這給了我7,5,5,但 「櫻桃」 是8

什麼是我在這裏失蹤? 謝謝。

回答

4

您已經完成了長度的最大字數。這給了錯誤的答案,因爲字是有序lexicographically

>>> 'oranges' > 'cherries' 
True 

什麼你可能想的是最大話的長度:

max(len(word) for word in i) 

或等價:

len(max(i, key=len)) 
+0

非常感謝你。那樣做了。 –

+0

只是好奇,我怎麼也打印出最大字符串以及每個元素的最大長度?謝謝 –

+0

我很肯定你可以自己想象出來! – wim

-1

您正在打印每行最大元素的長度。 Python將max字符串元素計算爲字典中最後一個看到的字符串元素(詞典排序)。你想要什麼,而不是爲max(len(s) for s in i),而不是len(max(i))

for row in tableData: 
    print(max(len(s) for s in row)) 
+1

抱歉不清楚。我想要嵌套列表中每個元素的最大字符串長度。所以期望看到:8,5,5。 –

+0

@ AT_1965:查看更新 – inspectorG4dget

0

在字符串操作max將返回字符串長度不是基本的最大字母字符。所以你必須做這樣的事情。

len(max(sum(tableData,[]),key=len)) 

sum(tableData,[])將轉換list of listlist這有助於通過列表的列表進行迭代。

長度每行

In [1]: [len(max(i,key=len)) for i in tableData] 
Out[1]: [8, 5, 5] 

見之探源中,

In [2]: max(sum(tableData,[])) 
Out[2]: 'oranges' 
In [3]: max(sum(tableData,[]),key=len) 
Out[3]: 'cherries' 
+0

我沒有記住你,但用戶想要每行的最大長度 - 而不是整個表格。此外,使用'sum'加入列表無需低效,大多數人更喜歡使用理解或[鏈接](https://docs.python.org/2/library/itertools.html#itertools.chain)。 – wim

+0

@wim這是真的,人們只喜歡理解,這是最有效的方法。我只是使用'sum',因爲它是一個小目的。而且我更新了每行長度查找的答案。並感謝您指出。 –

相關問題