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实现简单的TCP代理服务器
Oct 08 Python
Python中计算三角函数之cos()方法的使用简介
May 15 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
python挖矿算力测试程序详解
Jul 03 Python
简单了解python关系(比较)运算符
Jul 08 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
python实现智能语音天气预报
Dec 02 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
创业培训计划书
2014/05/03 职场文书
机械生产实习心得体会
2016/01/22 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
Mysql binlog日志文件过大的解决
2021/10/05 MySQL
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL