【Python】二维列表如何获取子区域元素的组成

二维列表如何获取子区域元素的组成

用过 numpy 的应该都知道,在二维数组中可以方便地使用区域切片功能,如下图:
在这里插入图片描述
而这个功能在 Python 标准库的 list 中是不支持的,在 list 中只能以一维方式来进行切片操作:
在这里插入图片描述

__getitem__方法

有时候我只想用一下这个功能,但又不想引入 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])

在这里插入图片描述

lambda方法

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中二维列表如何获取子区域元素的组成

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值