ホームページ >バックエンド開発 >Python チュートリアル >Python で 2 次元リストからサブ領域要素の構成を取得する方法

Python で 2 次元リストからサブ領域要素の構成を取得する方法

高洛峰
高洛峰オリジナル
2017-02-14 14:05:101706ブラウズ

この記事では、Python で 2 次元のリストからサブエリア要素の構成を取得する方法を主に紹介し、必要に応じて、すべての人の理解と学習に一定の参考になると思います。 , 以下を見てみましょう。

NumPY を使用したことがある方は、以下に示すように、領域スライス関数を 2 次元配列で便利に使用できることを知っているはずです: NumPY的应该都知道,在二维数组中可以方便地使用区域切片功能,如下图:

Python で 2 次元リストからサブ領域要素の構成を取得する方法

而这个功能在Python标准库的List中是不支持的,在List中只能以一维方式来进行切片操作:

Python で 2 次元リストからサブ領域要素の構成を取得する方法

但有时候我只想用一下这个功能,但又不想引入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])

Python で 2 次元リストからサブ領域要素の構成を取得する方法

官方文档对__getitem__的解释:

Python で 2 次元リストからサブ領域要素の構成を取得する方法

简而言之,其主要用来获取self[key]的值。

我在这里为了突出问题解决,只列出了关键代码,异常判断、边界检查、条件限制,甚至其他一些特殊方法如__setitem____delitem____len__

サブ領域要素の取得方法Python の 2 次元リストから

この関数は、Python 標準ライブラリの List ではサポートされていません。 List の 1 次元モードでスライス操作を実行するには:

Python で 2 次元リストのサブエリア要素の構成を取得する方法

しかし、この関数を使いたいだけで、導入したくない場合もあります。 code>NumPY。実際、現時点では Python で実装することもできます。現時点では、__getitem__ 特別メソッドをクラスに実装するだけです:

Python で 2 次元リストからサブ領域要素の構成を取得する方法

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)

🎜試してみてください: 🎜🎜🎜rrreee🎜🎜🎜「🎜🎜公式ドキュメントでは __getitem__ について説明しています: 🎜🎜 Python で 2 次元リストを取得する方法 サブエリア要素の構成🎜🎜要するに、主に自分[キー]コード>。 🎜🎜問題の解決策を強調するために、キー コード、例外判定、境界チェック、条件付き制限、さらには __setitem__ などの他の特別なメソッド <code>__delitem__ <code>__len__ などのコードは状況に応じて追加する必要があります。 🎜🎜もちろん、以下に示すコードなど、他の方法で処理することもできますが、さまざまな方法により、さまざまなシナリオでさまざまなオプションが提供されることは間違いありません。 🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜 Python で 2 次元リスト内のサブエリア要素の構成を取得する方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。 🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。