Python负面列表索引包装为切片

时间:2011-10-14 00:34:16

标签: python list slice

我有嵌套列表,表示各种各样的表。我想访问上面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,或者某个东西被触发,我的程序可能会对此做出反应。

有什么想法吗?

2 个答案:

答案 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