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语言的面相对象编程方式初步学习
Mar 12 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
Python实现最常见加密方式详解
Jul 13 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
Python龙贝格法求积分实例
Feb 29 Python
python初步实现word2vec操作
Jun 09 Python
Python持续监听文件变化代码实例
Jul 22 Python
python 6行代码制作月历生成器
Sep 18 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
python实现定时发送邮件到指定邮箱
Dec 23 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
windows下ipython的安装与使用详解
2016/10/20 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Python 操作 MySQL数据库
2020/09/18 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
外贸采购员求职的自我评价
2013/11/26 职场文书
大学军训感言300字
2014/03/09 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
预备党员自我评价范文
2015/03/04 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python