这篇文章主要给大家介绍了 Python 中二维列表是如何获取子区域元素的组成,文中给出了详细的介绍和示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧。
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
用过
的应该都知道,在二维数组中可以方便地使用区域切片功能,如下图:
- NumPY
而这个功能在 Python 标准库的
中是不支持的,在
- List
中只能以一维方式来进行切片操作:
- List
但有时候我只想用一下这个功能,但又不想引入
。其实这时候我也是可以在 Python 中实现的。这时候,只需在一个类中实现
- NumPY
特殊方法:
- __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)
总结
来源: http://www.phperz.com/article/17/0313/320351.html