ホームページ >バックエンド開発 >Python チュートリアル >Python で 2 次元リストからサブ領域要素の構成を取得する方法
この記事では、Python で 2 次元のリストからサブエリア要素の構成を取得する方法を主に紹介し、必要に応じて、すべての人の理解と学習に一定の参考になると思います。 , 以下を見てみましょう。
NumPY
を使用したことがある方は、以下に示すように、領域スライス関数を 2 次元配列で便利に使用できることを知っているはずです: 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__
List
ではサポートされていません。 List
の 1 次元モードでスライス操作を実行するには:
しかし、この関数を使いたいだけで、導入したくない場合もあります。 code>NumPY。実際、現時点では Python で実装することもできます。現時点では、__getitem__
特別メソッドをクラスに実装するだけです: 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__
について説明しています: 🎜🎜 🎜🎜要するに、主に自分[キー]コード>。 🎜🎜問題の解決策を強調するために、キー コード、例外判定、境界チェック、条件付き制限、さらには __setitem__ などの他の特別なメソッド <code>
、__delitem__ <code>__len__
などのコードは状況に応じて追加する必要があります。 🎜🎜もちろん、以下に示すコードなど、他の方法で処理することもできますが、さまざまな方法により、さまざまなシナリオでさまざまなオプションが提供されることは間違いありません。 🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜 Python で 2 次元リスト内のサブエリア要素の構成を取得する方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。 🎜