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之Socket网络编程详解
Sep 29 Python
python2.7的编码问题与解决方法
Oct 04 Python
名片管理系统python版
Jan 11 Python
详解python中asyncio模块
Mar 03 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
python算法题 链表反转详解
Jul 02 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 Python
python实点云分割k-means(sklearn)详解
May 28 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Pytorch使用shuffle打乱数据的操作
May 20 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 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
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
2014过年倒计时示例
2014/01/31 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
php封装的smarty类完整实例
2016/10/19 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
JS实现吸顶特效
2020/01/08 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
python 文件和路径操作函数小结
2009/11/23 Python
浅谈python迭代器
2017/11/08 Python
python字符串与url编码的转换实例
2018/05/10 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
2014年银行个人工作总结
2014/12/05 职场文书
消防演习感想
2015/08/10 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis