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牛刀小试密码爆破
Feb 03 Python
python通过定义一个类实例作为ftp回调方法
May 04 Python
用Python计算三角函数之acos()方法的使用
May 15 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
Python 之 Json序列化嵌套类方式
Feb 27 Python
Python实现查找数据库最接近的数据
Jun 08 Python
OpenCV 之按位运算举例解析
Jun 19 Python
Python下载的11种姿势(小结)
Nov 18 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 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
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
Vue组件通信的几种实现方法
2019/04/25 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
django序列化serializers过程解析
2019/12/14 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
党员的自我评价范文
2014/01/02 职场文书
物流仓储计划书
2014/01/10 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
英语课外活动总结
2014/08/27 职场文书
2015年父亲节寄语
2015/03/23 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js