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的SQLAlchemy框架使用入门
Apr 29 Python
Python定时执行之Timer用法示例
May 27 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
python 图片去噪的方法示例
Jul 09 Python
python的debug实用工具 pdb详解
Jul 12 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
简述 Python 的类和对象
Aug 21 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代码审核的详细介绍
2013/06/13 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
jquery 简单的进度条实现代码
2010/03/11 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
医药销售求职信范文
2014/02/01 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
自考生自我评价
2019/06/21 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL