This article mainly introduces how to obtain the composition of sub-area elements from a two-dimensional list in Python. The article gives a detailed introduction and sample code. I believe it has certain reference value for everyone's understanding and learning. Friends in need, please come and take a look below.
Anyone who has used NumPY
should know that the area slicing function can be conveniently used in a two-dimensional array, as shown below:
This function is not supported in List
of the Python standard library. In List
, slicing operations can only be performed in one dimension:
But sometimes I just want to use this function, but don’t want to introduce NumPY
. In fact, I can also implement it in Python at this time. At this time, just implement the __getitem__
special method in a class:
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)]
Try it:
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])
Official document’s explanation of __getitem__
:
In short, it is mainly used to obtain the value of self[key]
.
In order to highlight the solution to the problem, I only list the key codes, exception judgment, boundary checking, conditional restrictions, and even some other special methodssuch as __setitem__
, __delitem__# Codes such as ## and
__len__ need to be added according to the actual situation.
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)