You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:36:03