用過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 首先,定義了乙個二維列表...