我有嵌套列表,表示各种各样的表。我想访问上面n行的元素。然而,这很容易,我的问题是我想抓住桌子外面的任何东西并做出反应。但是在这种情况下,afaics负面指数被解释为切片并且“被缠绕”。
以下是一个例子:
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,或者某个东西被触发,我的程序可能会对此做出反应。
有什么想法吗?
答案 0 :(得分: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]
答案 1 :(得分: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