Python中二維列表如何獲取子區域元素的組成

2022-10-04 21:27:40 字數 1624 閱讀 5868

用過numpy的應該都知道,在二維陣列中可以方便地使用區域切片功能,如下圖:

而這個功能在python標準庫的list中是不支援的,在list中只能以一維方式來進行切片操作:

但有時候我只想用一下這個功能,但又不想引入numpy。其實這時候我也是可以在python中實現的。這時候,只需在乙個類中實現__getitem__特殊方法:

class array:

"""實現__gewww.cppcns.comtitem__,支援序列獲取元素、slice等特性"""

def syeyzo__init__(self, lst):

self.__coll = lst

def __repr__(self):

"""顯示列表"""

return ''.format(self.__coll)

def __getitem__(self, key):

"""獲取元素"""

slice1, slice2 = key

row1 = slice1.start

row2 = slice1.stop

col1 = slice2.start

col2 = slice2.stop

return [self.__coll[r][col1:col2] for r in range(row1, row2)]

試試看:

a = array([['a', 'b', 'c', 'd'],

['e', 'f', 'g', 'h'],

['i', 'j', 'k', 'l'],

['m', 'n', 'o', 'p'],

['q', 'r', 's', 't'],

['u', 'v', 'w', 'x']])

print(a[1:5, 1:3])

官方文件對__getitem__的解釋:

簡而言之,其主要用來獲取self[key]的值。

我在這裡為了突出問題解決,只列出了關鍵**,異常判斷、邊界檢查、條件限制,甚至其他一些特殊方法如__setitem__、__delitem__與__len__等**,需視實際情況新增。

當然,也有其他處理方式,如以下所示**,但不syeyzo同方法無疑給了我各種場景下的多種選項。

a = [['a', 'b', 'c', 'd'],

['e', 'f', 'g', 'h'],

['i', 'j', 'k', 'l'],

['m', 'n', 'o', 'p'],

['q', 'r', 's', 't'],

['u', 'v', 'w', 'x']]

sl = lambda row1, row2, col1, col2, lst: \

[lst[r][col1:cowww.cppcns.coml2] for r in range(row1, row2)]

sl(1, 5, 1, 3, a)

總結以上就是這篇文章的全部內容了,python程式設計乙個吸引我的地方就是,它就像是一座金礦,挖著挖著很可能就挖出些意想不到的樂趣出來。希望本文的內容對大家學習或者使用python能有一定的幫助,如果有疑問大家可以留言交流。

本文標題: python中二維列表如何獲取子區域元素的組成

本文位址: /jiaoben/python/177242.html

python中二維列表的建立

以下內容來自 侵刪先看一段 py array 0,0,0 matrix array 3 print matrix 0,0,0,0,0,0,0,0,0 py 這段 其實沒有新建乙個二維陣列 再看一段 py array 0,0,0 matrix array 3 print matrix 0,0,0 0,...

python中二維列表的遍歷方式

第一種方式 類似於matlab中的二維資料索引,比較直觀,容易理解 list2d 1,2,3 4,5,6 sum 0 for i in range len list2d for j in range len list2d 0 sum list2d i j print sum 首先,定義了乙個二維列表...

python中二維列表的遍歷方式 親測

第一種方式 類似於matlab中的二維資料索引,比較直觀,容易理解 list2d 1,2,3 4,5,6 sum 0 for i in range len list2d for j in range len list2d 0 sum list2d i j print sum 首先,定義了乙個二維列表...