首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回列表的所有“位置”

返回列表的所有“位置”
EN

Stack Overflow用户
提问于 2011-01-18 10:22:32
回答 3查看 128关注 0票数 1

我有一个包含"a“和"b”的列表,"b“是某种程度上的路径,而”a“是墙。我正在编写一个程序来绘制所有可能的移动的图表。我运行代码来检查第一个”b“是否可能的移动,但我不知道如何找到所有的”b“,更不用说不重复地检查它们了。

我的主要问题是从列表中获取“b”的元组坐标。

有什么建议/建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-18 10:57:58

这将从每个方块中查找有效移动的列表。

我假设地图的边缘是一堵“墙”,你不能沿对角线移动:

代码语言:javascript
复制
# reference like this: maze[y][x] or maze[row][col]
# with [0][0] starting at the top left
maze = [['b','a','a', 'a'],
        ['b','a','b', 'a'],
        ['b','a','b', 'b'],
        ['b','b','b', 'a'],
        ['b','a','b', 'a'],
        ['a','a','a', 'a']]

moves = {}

# Loop through all cells of the maze, starting in the top-left
for y, row in enumerate(maze):
    for x, value in enumerate(row):
#        print "y, x, val: ", y, x, value
        # for every cell, create an empty list of moves
        moves[y, x] = []
        # then if we can move from this cell
        # check each of its neighbours and if they are a 'b' add it 
        # to the list of moves - assumes we can't move diagonally
        if value == 'b':
            if y - 1 > 0 and maze[y - 1][x] == 'b':
                moves[y, x].append((y - 1, x))
            if y + 1 < len(maze) and maze[y + 1][x] == 'b':
                moves[y, x].append((y + 1, x))
            if x - 1 > 0 and maze[y][x - 1] == 'b':
                moves[y, x].append((y, x - 1))
            if x + 1 < len(row) and maze[y][x+1] == 'b':
                moves[y, x].append((y, x+1))

print moves
票数 0
EN

Stack Overflow用户

发布于 2011-01-18 10:39:10

代码语言:javascript
复制
grid = [['b','a','b'],['b','b','b'],['a','a','a']
results = []
for row in range(len(grid)):
  for col in range(len(grid[row])):
    if grid[row][col] == 'b':
      results.append((row, col))

print results

也许有一些更好的方法可以使用地图来实现,但是我已经有一段时间没有使用Python了。

票数 2
EN

Stack Overflow用户

发布于 2011-01-18 10:55:42

+1给Nemo157他的答案。如果您想要完全相同的代码,但只需要一行代码,则可以按如下方式完成:

代码语言:javascript
复制
grid = [['b','a','b'],['b','b','b'],['a','a','a']
[(row, col) for row in range(len(grid)) for col in range(len(grid[row])) if grid[row][col] == 'b']

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4719922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档