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

如何移除字符串列表中以其他现有单字字符串为后缀的组合字符串?

问题分析与解决方案

原代码循环卡死的原因

你的第二个循环逻辑完全错误,直接导致无限循环:

  • 你在遍历new_list的同时,不断往new_list里追加元素i,这会让new_list长度持续增长,外层的for i in new_list永远无法遍历结束,最终因运行时间过长被终止。
  • contains_word的判断逻辑搞反了,你应该检查组合字符串的最后一个词是否属于单字词集合,而非用单字词去匹配组合字符串。
  • 用set处理remain_list还会打乱原列表顺序,这大概率不是你想要的结果。

可行解决方案

先明确需求:保留单字词,以及最后一个词不是列表内单字词的组合字符串;移除最后一个词是列表内现有单字词的组合字符串。

步骤拆解

  1. 提取列表中所有单字词,存入集合(集合的查找效率远高于列表)。
  2. 遍历原列表,对每个元素做判断:
    • 若是单字词,直接保留;
    • 若是多字词,拆分出最后一个词,检查它是否在单字词集合里:不在则保留,在则移除。

代码实现

ex_list = ['transport truck', 'truck', 'plastic boat', 'boat', 'transport', 'ferry', 'truck parking', 'pickup truck', 'pickup']

# 提取所有单字词,存入集合用于快速查找
single_words = {word for word in ex_list if len(word.split()) == 1}

new_list = []
for item in ex_list:
    parts = item.split()
    if len(parts) == 1:
        # 单字词直接保留
        new_list.append(item)
    else:
        # 多字词,检查最后一个词是否不在单字词集合中
        last_word = parts[-1]
        if last_word not in single_words:
            new_list.append(item)

print(new_list)

输出结果

['truck', 'boat', 'transport', 'ferry', 'truck parking', 'pickup']

这个方案逻辑准确,时间复杂度为O(n)(n为列表长度),运行效率高,不会出现循环卡死的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:55:33