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

如何从单词列表查找并移除总字母数为20的单词对及代码修复

我来帮你修复代码并实现需求。先梳理下原代码里的核心问题,再一步步改进:

原代码的主要问题

  • 手动计算单词长度完全没必要,Python里用len(word)就能直接得到单词的字母数,既简洁又高效。
  • 在遍历列表的同时直接修改列表(用pop)会导致索引混乱,很容易触发越界错误——因为列表长度在动态变化,原来的索引会失效。
  • 循环逻辑绕得太复杂,外层的for word in words加c计数的设计完全冗余,反而把逻辑搞乱了。
  • pop的顺序错误:如果先pop(i),原j位置的元素会往前移一位,再pop(j)就会删掉错误的元素。

修复后的代码

# 用with语句自动管理文件,避免忘记关闭文件
with open('input.txt', 'r') as f:
    words = f.read().split()

# 持续循环,直到没有符合条件的单词对为止
while True:
    found_pair = False
    # 遍历所有不重复的单词对(i < j,避免重复检查同一对)
    for i in range(len(words)):
        for j in range(i + 1, len(words)):
            # 直接用len()计算单词长度,判断和是否为20
            if len(words[i]) + len(words[j]) == 20:
                print(f"{words[i]} {words[j]}")
                # 先删除索引大的元素,避免删除小索引后大索引偏移
                words.pop(j)
                words.pop(i)
                found_pair = True
                # 找到一对后立刻跳出循环,重新检查新的列表
                break
        if found_pair:
            break
    # 如果遍历完所有组合都没找到匹配,就退出程序
    if not found_pair:
        break

代码说明

  1. 文件读取:用with语句打开文件,代码块结束后会自动关闭文件,比直接open更安全。
  2. 循环逻辑:用while True做无限循环,直到找不到符合条件的对才跳出。
  3. 匹配检查:通过嵌套循环遍历所有i < j的单词对,确保每一对只被检查一次,避免重复工作。
  4. 删除元素:先删索引大的j,再删小的i——因为j > i,删除j不会影响i的位置,避免索引偏移错误。
  5. 终止条件:每次循环用found_pair标记是否找到匹配,若一轮遍历后没找到,就说明没有符合条件的对了,直接退出程序。

内容的提问来源于stack exchange,提问作者user14311289

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:03:57