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

4

这是我之前发布帖子(关于从列表中打印表格)的跟进问题:

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

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

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

这给了我7、5、5。但“cherries”的分值是8。

我在这里错过了什么?谢谢。

3个回答

7
你已经完成了“最长单词长度”的任务。这会得出错误的答案,因为单词是按字典顺序排序的。按字典顺序
>>> 'oranges' > 'cherries'
True

你可能想要的是单词长度的最大值:
max(len(word) for word in i)

或者等价地:

len(max(i, key=len))

只是好奇,我如何打印出每个元素的最大字符串和最大长度?谢谢。 - AT_1965
我尝试了这个 - print(i[2], len(max(i, key=len))) 但那并不真正起作用。 - AT_1965
由于 len(max(i, key=len)) 给出了最长单词的长度,因此很容易看出 max(i, key=len) 给出了最长的单词。 - wim

1
在字符串操作中,max会返回字符串中最大的字母字符,而不是基于长度。因此您需要像这样做。
len(max(sum(tableData,[]),key=len))

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

每行的长度

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'

我并没有对你进行数据验证,而是用户想要在每一行中设置最大长度 - 而不是整个表。 此外,使用 sum 加入列表是不必要的低效率做法,大多数人更喜欢使用推导式或 chain 来实现。 - wim
@wim确实如此,人们只喜欢理解最高效的方法。我只是使用“sum”因为它是一个小目的。我已经更新了我的答案以找到每行长度。非常感谢您的指出。 - Rahul K P

-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。 - AT_1965

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接