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

Python函数实现求助:筛选Alice与Silvester安全碰面的地点

问题分析与解决方案

你的代码逻辑出错的核心原因是:你判断的是x和bob中的某一个元素不等,而不是x完全不在bob的路径列表里。比如“Ⅲ”确实在bob的列表中,但当循环到bob里的“Ⅳ”时,x=Ⅲ,c=Ⅳ,满足x !=c,这时候就会把“Ⅲ”错误加入结果,完全不符合需求。

正确的逻辑应该是:

  • 先找到Alice和Silvester都去过的地点(交集)
  • 再从这些地点里排除所有Bob去过的

简洁的集合实现方式

利用Python的集合操作可以高效解决这个问题,集合的交集、差集操作正好匹配需求:

def affair_meet(bob, alice, silvester):
    # 转成集合去重,同时方便集合操作
    alice_set = set(alice)
    silvester_set = set(silvester)
    bob_set = set(bob)
    # 先取Alice和Silvester的交集,再减去Bob的地点
    result = alice_set & silvester_set - bob_set
    # 如果需要返回列表(和你原代码返回类型一致),就转成list
    return list(result)

if __name__ == '__main__':
    alice = ['Ⅱ', 'Ⅳ', 'Ⅱ', 'ⅩⅠⅩ', 'ⅩⅤ', 'Ⅳ', 'Ⅲ']
    bob = ['Ⅳ', 'Ⅲ', 'Ⅱ', 'ⅩⅩ', 'Ⅱ', 'ⅩⅩ']
    silv = ['ⅩⅧ', 'ⅩⅠⅩ', 'Ⅲ', 'Ⅰ', 'Ⅲ', 'ⅩⅧ']
    print(affair_meet(bob, alice, silv))  # 输出: ['ⅩⅠⅩ']

如果想用循环实现(适合新手练习)

如果你想通过循环来实现正确逻辑,需要调整判断条件:先判断x在Alice和Silvester中都存在,然后检查x不在整个bob列表里,再去重添加:

def affair_meet(bob, alice, silvester):
    list1 = []
    # 遍历Alice的所有地点(先去重,避免重复判断)
    for x in set(alice):
        # 条件1:x在Silvester的路径里;条件2:x不在Bob的路径里
        if x in silvester and x not in bob:
            list1.append(x)
    return list1

这样就能正确过滤掉Bob去过的“Ⅲ”,只保留符合要求的地点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:42:44