如何在嵌套列表中获取最大字符串长度

时间:2016-09-07 15:13:50

标签: python

这是我之前发布的帖子的后续问题(从列表列表中重新打印表格)

我试图获取以下嵌套列表的字符串最大值:

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

我在这里失踪了什么? 感谢。

3 个答案:

答案 0 :(得分:5)

您已完成最长字的长度。这给出了错误的答案,因为单词被排序lexicographically

>>> 'oranges' > 'cherries'
True

你可能想要的是单词长度的最大值

max(len(word) for word in i)

或等效地:

len(max(i, key=len))

答案 1 :(得分:0)

在字符串操作中max将返回字符串中的最大字母字符,而不是长度基础。所以你必须做这样的事情。

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

sum(tableData,[])会将list of list转换为list,这有助于遍历列表列表。

每行的长度

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'

答案 2 :(得分:-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))