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中__name__的使用实例
Apr 14 Python
Python计算一个文件里字数的方法
Jun 15 Python
python实现批量监控网站
Sep 09 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
python list转矩阵的实例讲解
Aug 04 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
Pycharm如何打断点的方法步骤
Jun 13 Python
Pytorch之Variable的用法
Dec 31 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
详解python UDP 编程
Aug 24 Python
python regex库实例用法总结
Jan 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/11/23 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python的log日志功能及设置方法
2019/07/11 Python
python中bytes和str类型的区别
2019/10/21 Python
Python正则表达式如何匹配中文
2020/05/27 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
益达广告词
2014/03/14 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
委托书格式范文
2015/01/28 职场文书
唐山大地震观后感
2015/06/05 职场文书
终止合同协议书范本
2016/03/22 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
日元符号 ¥
2022/02/17 杂记