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的Flask框架中实现简单的登录功能的教程
Apr 20 Python
Python的函数的一些高阶特性
Apr 27 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
python语言中with as的用法使用详解
Feb 23 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
python实现windows壁纸定期更换功能
Jan 21 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
tensorflow 限制显存大小的实现
Feb 03 Python
Python3获取cookie常用三种方案
Oct 05 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
pandas按条件筛选数据的实现
Feb 20 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版
2012/04/20 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php格式文件打开的四种方法
2018/02/24 PHP
html读出文本文件内容
2007/01/22 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
python实现按任意键继续执行程序
2016/12/30 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
pygame实现飞机大战
2020/03/11 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
团队口号大全
2014/06/06 职场文书
单位活动策划方案
2014/08/17 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
Python破解极验滑动验证码详细步骤
2021/05/21 Python
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang