Python 在列表中使用文本负索引

Python 在列表中使用文本负索引,python,list,indexing,Python,List,Indexing,通常在Python中,如果我们将lst[-1]放在长度为lst的项上。但我想把它放在索引0之前。这可能吗?我环顾了四周,但还没有发现任何有用的东西 目前,我正在研制一种绘制房间地图的机器人。索引将用于房间中的坐标,因此如果我的机器人在2d列表中从0开始,那么我需要能够在正方向和负方向上遍历X&Y轴。这就是为什么我需要这个,我需要能够使用0作为列表的开头,而只是列表的一部分。听起来你的程序运行时不知道房间有多大,因为它使用机器人来映射房间。在这种情况下,让我们停止尝试使用列表索引,使用更适合处理任

通常在Python中,如果我们将lst[-1]放在长度为lst的项上。但我想把它放在索引0之前。这可能吗?我环顾了四周,但还没有发现任何有用的东西


目前,我正在研制一种绘制房间地图的机器人。索引将用于房间中的坐标,因此如果我的机器人在2d列表中从0开始,那么我需要能够在正方向和负方向上遍历X&Y轴。这就是为什么我需要这个,我需要能够使用0作为列表的开头,而只是列表的一部分。

听起来你的程序运行时不知道房间有多大,因为它使用机器人来映射房间。在这种情况下,让我们停止尝试使用列表索引,使用更适合处理任意键的任务的方法

from collections import defaultdict

cur_map = defaultdict(dict)
这将创建一个dict对象,当您为其分配未知键时,该对象将创建一个新的dict作为值。换言之:

cur_map[0]['foo'] = 'bar'
# cur_map now looks like
# {0: {'foo': 'bar'}}
字典可以将任意散列对象作为键,所以您可以这样做

cur_map[0][0] = "START"
cur_map[0][-1] = "South x1"
cur_map[-1][-1] = "South x1, West x1"
# etc

是的,你可以。例如,如果您想要一个x索引为-50到50、y索引为-50到50的2D列表,那么只需制作一个101x101列表,并将负索引解释为之前的索引。取决于你对他们的看法


我以前使用过这个,例如在迷宫游戏中,以避免在我的主代码中进行边界检查。我只是在实际字段之外添加了两行和两列,并在最后两行和两列的单元格中添加了墙。然后,索引-1简单地表示索引0上方的行和索引为0的列的左侧。

您认为索引0之前有什么?在0之前没有任何内容。你几乎可以肯定地解决了你的问题,不管它以什么错误的方式。确定go_to=lambda index,a_list:a_list[index]如果index>0,那么你在使用字典,d[-1]可以是你想要的任何东西。@ChristopherJakob你需要找到一种方法将坐标转换为列表索引,而不是相反的方法。列表或数组从零开始计数。对于需要隐式边界检查的游戏来说,这是一种很好的方法,尽管当索引器发生时,您仍然可能会遇到奇怪的崩溃