這篇文章主要給大家介紹了Python中二維列表是如何獲取子區域元素的組成,文中給出了詳細的介紹和示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
用過NumPY
的應該都知道,在二維數組中可以方便地使用區域切片功能,如下圖:
而這個功能在Python標準庫的List
而這個功能在Python標準庫的
中是不支援的,在
List中只能以一維方式來進行切片操作:
NumPY
。其實這時候我也是可以在Python中實現的。這時候,只需在一個類別中實作__getitem__
特殊方法:class Array: """实现__getitem__,支持序列获取元素、Slice等特性""" def __init__(self, lst): self.__coll = lst def __repr__(self): """显示列表""" return '{!r}'.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])
簡而言之,其主要用來取得self[key]
的值。我在這裡為了突出問題解決,只列出了關鍵代碼,異常判斷、邊界檢查、條件限制,甚至其他一些特殊方法
如__setitem__
__delitem__與
__len__等代碼,需視實際情況添加。
當然,也有其他處理方式,如下所示程式碼,但不同方法無疑給了我各種場景下的多種選項。
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:col2] for r in range(row1, row2)] sl(1, 5, 1, 3, a)
更多Python中二維列表如何取得子區域元素的組成相關文章請關注PHP中文網!