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

如何在Python的二维tilemap列表中检测指定值是否存在?

检测二维列表中的特定值

你猜的没错,if 0 in tilemap这类写法只会检查外层列表的直接元素(也就是每个子列表),不会深入子列表内部查找元素,所以即使子列表里有0,也会返回False。要检测二维列表中的9或20,有几种简单高效的方法:

方法一:普通循环遍历(直观易懂)

import random as r

# 初始化你的tilemap
tilemap =  [['W','W','W','W','W','W','W','W','W'],['W',0,0,0,0,0,0,'E','W'],['W',0,r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),0,'W'],['W',0,r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),0,'W'],['W',0,r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),0,'W'],['W',0,r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),0,'W'],['W',0,r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),0,'W'],['W',0,r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),r.randint(0,20),0,'W'],['W','P',0,0,0,0,0,0,'W'],['W','W','W','W','W','W','W','W','W']]

targets = {9, 20}
found = False
for row in tilemap:
    # 检查当前行是否包含目标值
    if any(t in row for t in targets):
        found = True
        break  # 找到就终止循环,提升效率
print(found)

方法二:一行式简洁写法(Pythonic)

利用any()函数的短路特性,只要找到目标值就停止遍历,效率很高:

# 检查是否存在9或20
has_target = any(9 in row or 20 in row for row in tilemap)

# 如果目标值较多,用集合交集判断更高效
has_target = any({9, 20}.intersection(row) for row in tilemap)

原理补充

  • x in tilemap:判断的是x是否是tilemap的直接成员(即每个子列表),而非子列表内部的元素。
  • any()函数会逐个遍历可迭代对象,只要有一个元素为True就立刻返回True,避免不必要的遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:25:18