Python 负数列表索引作为切片处理
我有一些嵌套的列表,它们就像一个表格。我想访问上面n行的元素,这个操作很简单。不过,我的问题是,我希望能够处理那些超出表格范围的情况,也就是当我访问的索引不在表格内时,程序能够做出反应。但我发现,负数索引在这种情况下会被当作切片处理,结果就变成了“循环”访问。
这里有个例子:
lists = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
for i in range(len(lists)):
for k in [-1,0,1]:
print, lists[i+k][0]
print
11 1 6
1 6 11
6 11
IndexError: list index out of range
我希望第一次调用的时候能抛出一个IndexError(索引错误),或者触发某种事件,让我的程序能够做出反应。
有什么想法吗?
2 个回答
0
当它尝试打印整行数据时,会出现错误。
lists = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
merged=zip(*lists)
keys=[-1,0,1]
row=merged[0]
for i,_ in enumerate(row):
print " ".join((str(row[k+i]) for k in keys))
输出:
11 1 6
1 6 11
Traceback (most recent call last):
File "asdf.py", line 6, in <module>
print " ".join((str(row[k+i]) for k in keys))
File "asdf.py", line 6, in <genexpr>
print " ".join((str(row[k+i]) for k in keys))
IndexError: tuple index out of range
如果你不是在用Python 3,可以使用izip。
1
因为切片的功能是Python语法自带的,所以我建议在你的循环里加一个简单的'if'语句:
for k in [-1, 0, 1]:
idx = i+k
if idx < 0: raise IndexError, 'list index is out of range'
print lists[idx][0]