在列表中使用文字否定索引

时间:2015-05-22 17:43:02

标签: python list indexing

通常在Python中,如果我们提出lst[-1],则表示项目的长度为lst。但我想把它变成“在索引0之前”的意思。这样的事情可能吗?我环顾四周,但我还没有找到任何有用的东西。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

是的,你可以。例如,如果您想要一个带有x-indexes -50到50和y-indexes -50到50的2D列表,那么只需创建一个101x101列表并将解释负索引作为“之前”。由你如何看待它们。

之前我曾经使用过它,例如在迷宫拼图中,以避免在我的主代码中进行边界检查。除了实际字段之外,我只添加了两行和两列,并将“墙”放在最后两行和列的单元格中。索引-1然后简单地表示索引0之上的行和索引为0的列的左侧。