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安装以及IDE的配置教程
Apr 29 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
深入理解Django中内置的用户认证
Oct 06 Python
详解supervisor使用教程
Nov 21 Python
Python实现时钟显示效果思路详解
Apr 11 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
linux下python使用sendmail发送邮件
May 22 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
用python对excel查重
Dec 07 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python中super关键字用法实例分析
2015/05/28 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python requests模块实例用法
2019/02/11 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
工业自动化毕业生自荐信范文
2014/01/04 职场文书
会计专业自我鉴定
2014/02/10 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
节约用水标语
2014/06/11 职场文书
大学英语专业求职信
2014/06/21 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
CSS 伪元素::marker详解
2021/06/26 HTML / CSS