时间:2021-05-22
用过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能有一定的帮助,如果有疑问大家可以留言交流。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
python调用二维列表中的一维列表的方法:访问二维列表中的一维列表可以用下标法“列表名(数字)”的方式获取到一维列表所有元素x=[[23,25,15,69,4
列表推导(listcomprehensions)场景1:将一个三维列表中所有一维数据为a的元素合并,组成新的二维列表。最简单的方法:新建列表,遍历原三维列表,判
OPPO手机怎么识别图中二维码?当我们在收到带有二维码的图片消息时,该怎么识别图中的二维码内容呢,怎么识别图中二维码,下面就和小编一起来看看吧!手机中的微信,在
PHP中二维关联数组如何根据其中一个字段进行排序,下面的代码将二维关联数组$array根据$orderby字段进行排序:functionwpjam_array_
最近写一个和二维列表有关的算法时候发现的当用max求二维列表中最大值时,输出的结果是子列表首元素最大的那个列表测试如下c=[[1,2,-1],[0,5,6]]a