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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
Python多线程编程(一):threading模块综述
Apr 05 Python
详解Python编程中time模块的使用
Nov 20 Python
Python之reload流程实例代码解析
Jan 29 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
python虚拟环境完美部署教程
Aug 06 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 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
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
node.js require() 源码解读
2015/12/13 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
js实现文字截断功能
2016/09/14 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
WebPack基础知识详解
2017/01/16 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
原生python实现knn分类算法
2019/10/24 Python
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
班组长岗位职责范本
2014/01/05 职场文书
安全目标责任书
2014/07/22 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
旅游安全责任协议书
2016/03/22 职场文书
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis
mysql查找连续出现n次以上的数字
2022/05/11 MySQL