| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
diaoer
7年前发布

Python二维列表获取子区域元素组成

   <p><img src="https://simg.open-open.com/show/02aa38027653356536bbca5ae217a358.jpg"></p>    <p>用过NumPY的应该都知道,在二维数组中可以方便地使用区域切片功能,如下图:</p>    <p><img src="https://simg.open-open.com/show/1373134bb16c8340bb55eb6914ff2ad0.png"></p>    <p>而这个功能在Python标准库的List中是不支持的,在List中只能以一维方式来进行切片操作:</p>    <p><img src="https://simg.open-open.com/show/ab47c0006dcec7788841572751b0d504.png"></p>    <p>但有时候我只想用一下这个功能,但又不想引入NumPY。其实这时候我也是可以在Python中实现的。这时候,只需在一个类中实现 __getitem__ 特殊方法:</p>    <pre>  <code class="language-python">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)]</code></pre>    <p>试试看:</p>    <pre>  <code class="language-python">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])</code></pre>    <p><img src="https://simg.open-open.com/show/7f716dfa5ce4fd68068f43ceca6973fb.png"></p>    <p>官方文档对 __getitem__ 的解释:</p>    <p><img src="https://simg.open-open.com/show/fe72c7e38cb1e95c8b6d2a9dbf28bd67.png"></p>    <p>简而言之,其主要用来获取 self[key] 的值。</p>    <p>我在这里为了突出问题解决,只列出了关键代码,异常判断、边界检查、条件限制,甚至其他一些特殊方法如 __setitem__ 、 __delitem__ 与 __len__ 等代码,需视实际情况添加。</p>    <p>当然,也有其他处理方式,如以下所示代码,但不同方法无疑给了我各种场景下的多种选项。</p>    <pre>  <code class="language-python">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)</code></pre>    <p><img src="https://simg.open-open.com/show/f2106ac0dc832fcd91cec011d33b8b13.png"></p>    <p>Python编程一个吸引我的地方就是,它就像是一座金矿,挖着挖着很可能就挖出些意想不到的乐趣出来。</p>    <p> </p>    <p>来自:http://www.2gua.info/post/72</p>    <p> </p>    
 本文由用户 diaoer 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1484467697013.html
Python Python开发