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多线程用法实例详解
Jan 15 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
pytorch 数据集图片显示方法
Jul 26 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
如何通过Python实现标签云算法
Jul 02 Python
简单了解django缓存方式及配置
Jul 19 Python
python sorted方法和列表使用解析
Nov 18 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
Python远程linux执行命令实现
Nov 11 Python
基于Python实现天天酷跑功能
Jan 06 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
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
PHP的5个安全措施小结
2012/07/17 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
php绘制一条直线的方法
2015/01/24 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
php目录拷贝实现方法
2015/07/10 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
Require.js的基本用法详解
2017/07/03 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
python中将字典转换成其json字符串
2014/07/16 Python
Saltstack快速入门简单汇总
2016/03/01 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
公共事业管理本科生求职信
2013/10/07 职场文书
创伤外科专业推荐信范文
2013/11/19 职场文书
护士毕业生自荐信
2014/02/07 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
nginx之内存池的实现
2022/06/28 Servers