[英]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.