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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
python的else子句使用指南
Feb 27 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
requests和lxml实现爬虫的方法
Jun 11 Python
彻底理解Python list切片原理
Oct 27 Python
python 字符串只保留汉字的方法
Nov 16 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
Python socket模块方法实现详解
Nov 05 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
如何使用Pytorch搭建模型
Oct 26 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
header导出Excel应用示例
2014/01/24 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
javascript中的继承实例代码
2011/04/27 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
Python内置加密模块用法解析
2019/11/25 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
爱游人:Travelliker
2017/09/05 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
高等教育学自荐书范文
2014/02/10 职场文书
会计专业自我评价
2014/02/12 职场文书
企业文化标语大全
2014/06/10 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
师德师风事迹材料
2014/12/20 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
公司员工体检通知
2015/04/21 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书