簡體   English   中英

在Python 2.7中處理范圍外列表索引

[英]Handling out of range list index in Python 2.7

我在Python 2.7中有一個列表列表,就像下面顯示的那樣

rr =[[10 for row in range(5)] for col in range(5)]

現在,在我的算法中,我需要找到給定列表元素的鄰居,我使用以下方法檢查鄰居

b = [rr[rn][cn+1],rr[rn-1][cn+1],rr[rn-1][cn],rr[rn-1][cn-1],rr[rn][cn-1],rr[rn+1][cn-1],rr[rn+1][cn],rr[rn+1][cn+1]]

我想將0分配給給定矩陣(或列表)的邊界之外的相鄰元素

其中rn是行索引,而cn是我要檢查的列表單元格的列索引。 上面給出了,如果我的代碼檢查任何角單元格,該怎么辦? 例如說索引為[0,0]的第一行和第一列單元格元素,某些鄰居索引將為負數。 我的代碼有一個特殊的屬性,它阻止我向上述列表中添加其他行或列。

怎么處理呢? 任何幫助...

要解決綁定問題和rr[i,j]語法,可以在類中重載getitem方法:

class boundedlist(list):
    def __getitem__(self,indices):
        try: 
            l=list(self)
            for i in indices : l=l[i]
            return l
        except IndexError:
            return 0 

然后,所有工作如您所願:

In [76]: brr=boundedlist(rr)

In [77]: brr[4,3]
Out[77]: 10

In [78]: brr[4,6]
Out[78]: 0

In [79]: brr[-1,6]
Out[79]: 0

In [80]: brr[10,4]
Out[80]: 0

您可以像這樣保留行訪問權限:

In [81]: brr[[4]]
Out[81]: [10, 10, 10, 10, 10]

您可以將其推廣到更多維度。 如果要修改數據,則必須修改__setitem__

如果要訪問rr列表中的cell(1,1) ,則必須使用rr[1][1]

for i in range(len(rr)):
    for j in range(len(rr[i])):
        if (i, j) in [(rn, cn+1), (rn-1,cn+1 ), (rn-1, cn ), (rn-1, cn-1 ), (rn, cn-1 ), (rn+1, cn-1 ), (rn+1, cn ), (rn+1, cn+1)]:
            #Do some things
        else:
            #Do other things

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM