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

Python检查列表元素是否存在于另一列表并生成匹配结果列表

问题场景

现有两个列表(注意原示例中y列表的"ooo"后误写为句点,修正为逗号):

x = ["abc", "def", "ghi"]
y = ["ggg", "hhh", "abc", "yyy", "ttt", "uuu", "ooo", "def", "www", "xxx"]

需要生成新列表match:遍历x中每一个元素,若该元素存在于y则追加"Present",不存在则追加"Not Found",预期输出为:

match = ["Present", "Present", "Not Found"]
原有代码错误分析

你之前的三种实现都错误使用了嵌套循环,导致结果不符合预期:

  • 第一种写法:内层循环找到匹配项时会追加"Present",但无论是否找到匹配,内层循环结束后都会无条件追加一次"Not Found",最终列表会出现多余值,长度与x不一致。
  • 第二种写法:内层循环每完成一次元素对比就追加一次结果,最终会生成len(x)*len(y)个元素,远超出预期长度。
  • 第三种写法:分两轮嵌套循环,第一轮找到匹配就追加"Present",第二轮只要对比不匹配就追加"Not Found",会生成大量重复冗余值。
正确实现方案

不需要写两层嵌套循环,Python原生支持in关键字直接判断元素是否存在于序列中,逻辑简单不易出错。

  • 基础循环写法:
match = []
for item in x:
    if item in y:
        match.append("Present")
    else:
        match.append("Not Found")
  • 简洁列表推导式写法:
match = ["Present" if item in y else "Not Found" for item in x]
  • 大列表性能优化写法:
    如果两个列表长度很大,列表的in操作时间复杂度为O(n),可以先将y转为集合,把查询时间复杂度降到O(1),大幅提升运行效率:
y_set = set(y)
match = ["Present" if item in y_set else "Not Found" for item in x]

以上三种写法运行后都能得到你预期的match列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:07