如何在Python列表中查找长度第二长的单词
查找Python列表中第二长单词的正确实现
原有代码错误说明
- 写法1
longest_word = max(words, key=len)-2:max返回的是字符串格式的最长单词,字符串无法直接和整数做减法,会直接报错。 - 写法2
longest_word = max(words, key=len)[:-2]:仅对最长的单词本身做末尾截断,没有从原列表中查找其他长度第二的单词,完全不符合需求。 - 写法3 groupby实现存在两处错误:一是
sorted排序的对象是单个字符串longest_word,而非目标列表words;二是列表推导式缺少闭合方括号,语法错误无法运行。
正确实现方案
方案1:先取唯一长度再筛选(最易理解,支持批量匹配)
适合需要找出所有长度为第二长的单词的场景:
# 提取所有单词的长度并去重,按从大到小排序 unique_sorted_len = sorted({len(w) for w in words}, reverse=True) # 取第二大的长度值 second_len = unique_sorted_len[1] # 筛选所有符合第二长长度的单词 second_longest_words = [w for w in words if len(w) == second_len] # 如果只需要取任意一个第二长的单词,直接取列表首位即可 # second_longest = second_longest_words[0]
方案2:全列表排序后遍历(适合小数据量场景)
# 按单词长度降序排序整个列表 sorted_words = sorted(words, key=lambda x: len(x), reverse=True) max_len = len(sorted_words[0]) second_longest = None # 遍历找到第一个长度小于最大长度的单词,即为第二长 for w in sorted_words: if len(w) < max_len: second_longest = w break
方案3:修正后的groupby实现
from itertools import groupby # 先对整个words列表按长度降序排序 sorted_words = sorted(words, key=len, reverse=True) # 按长度分组,取第二个分组的内容即为所有第二长的单词 len_groups = [list(g) for _, g in groupby(sorted_words, key=lambda x: len(x))] second_longest_group = len_groups[1]
内容的提问来源于stack exchange,提问作者peoplet
相关产品推荐
相关产品推荐

