Python中二維列表如何擷取子領域元素的組成,python擷取

來源:互聯網
上載者:User

Python中二維列表如何擷取子領域元素的組成,python擷取

用過NumPY的應該都知道,在二維數組中可以方便地使用地區切片功能,如:

而這個功能在Python標準庫的List中是不支援的,在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])

官方文檔對__getitem__的解釋:

簡而言之,其主要用來擷取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編程一個吸引我的地方就是,它就像是一座金礦,挖著挖著很可能就挖出些意想不到的樂趣出來。希望本文的內容對大家學習或者使用python能有一定的協助,如果有疑問大家可以留言交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.