如何检查neighbors列表的首元素元组是否存在于queue列表中?
解决思路与代码示例
嘿,我来帮你搞定这个问题~你之前的写法之所以有问题,核心原因是你对比的对象不匹配:
queue里的每个元素都是完整的列表(比如[(1, 5), 4, (1, 4)])- 而你要检查的是
neighbors中每个元素的第一个元组(比如(1,5))
直接用item[0] in queue,相当于在找某个元组是否是queue列表里的完整元素,这显然找不到匹配项。
正确的做法
我们可以先把queue中所有元素的第一个元组提取出来,存成一个集合(集合的查找效率远高于列表,数据量大时优势明显),再逐一检查neighbors中的元组是否在这个集合里:
步骤1:提取queue中的目标元组集合
queue = [[(1, 5), 4, (1, 4)], [(2, 2), 6, (2, 3)], [(1, 3), 6, (2, 3)], [(1, 3), 6, (1, 4)]] # 用集合推导式提取所有第一个元组 queue_first_tuples = {item[0] for item in queue}
步骤2:遍历neighbors进行检查
neighbors = [[(1, 5), 4, (1, 4)], [(1, 3), 6, (1, 4)], [(2, 4), 4, (1, 4)], [(0, 4), 6, (1, 4)]] for item in neighbors: current_tuple = item[0] if current_tuple in queue_first_tuples: # 这里执行你需要的操作 print(f"元组 {current_tuple} 存在于queue中") else: print(f"元组 {current_tuple} 不存在于queue中")
运行结果
用你提供的测试数据,运行后会输出:
元组 (1, 5) 存在于queue中 元组 (1, 3) 存在于queue中 元组 (2, 4) 不存在于queue中 元组 (0, 4) 不存在于queue中
备选方案(用列表存储)
如果不想用集合,也可以用列表存储提取的元组,但注意列表的in操作是线性查找,数据量大时效率较低:
queue_first_tuples = [item[0] for item in queue]
内容的提问来源于stack exchange,提问作者SergioNeves
相关产品推荐
相关产品推荐

