Python中二维列表如何获取子区域元素的组成


Posted in Python onJanuary 19, 2017

用过NumPY的应该都知道,在二维数组中可以方便地使用区域切片功能,如下图:

Python中二维列表如何获取子区域元素的组成

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

Python中二维列表如何获取子区域元素的组成

但有时候我只想用一下这个功能,但又不想引入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中二维列表如何获取子区域元素的组成

官方文档对__getitem__的解释:

Python中二维列表如何获取子区域元素的组成

简而言之,其主要用来获取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编程一个吸引我的地方就是,它就像是一座金矿,挖着挖着很可能就挖出些意想不到的乐趣出来。希望本文的内容对大家学习或者使用python能有一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
使用python调用浏览器并打开一个网址的例子
Jun 05 Python
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
Django imgareaselect手动剪切头像实现方法
May 26 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
Python BS4库的安装与使用详解
Aug 08 Python
python sort、sort_index方法代码实例
Mar 28 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 #Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 #Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 #Python
一步步教你用Python实现2048小游戏
Jan 19 #Python
python 开发的三种运行模式详细介绍
Jan 18 #Python
Python 3中的yield from语法详解
Jan 18 #Python
Python中的字符串操作和编码Unicode详解
Jan 18 #Python
You might like
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
ext实现完整的登录代码
2008/08/08 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
JavaScript入门基础
2015/08/12 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
python实现文件路径和url相互转换的方法
2015/07/06 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
Python变量类型知识点总结
2019/02/18 Python
详解python 爬取12306验证码
2019/05/10 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
大学生党课思想汇报
2013/12/29 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
给老师的感谢信
2015/01/20 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android