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中的两个内置模块介绍
Apr 05 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
Python变量和数据类型详解
Feb 15 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
Python学生信息管理系统修改版
Mar 13 Python
Python随机函数random()使用方法小结
Apr 29 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python3中的bytes和str类型详解
May 02 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
Python基本知识点总结
Apr 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
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
PHP自定义多进制的方法
2016/11/03 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
vue模块拖拽实现示例代码
2019/03/09 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
文明风采获奖感言
2014/02/18 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python