Python: shorter syntax for slices with gaps?(Python:带间隙的切片的更短语法?)
本文介绍了Python:带间隙的切片的更短语法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我想要Python列表中的第一个元素、第三个到第200个元素以及从第201个元素到最后一个元素的步长为3的元素。
一种方法是使用不同的索引和串联:
new_list = old_list[0:1] + old_list[3:201] + old_list[201::3]
有没有办法在old_list
上只有一个索引就能做到这一点?我想要如下所示的内容(我知道这在语法上不起作用,因为列表索引不能是列表,而且不幸的是Pythondoesn't have slice literals;我只是在寻找接近的内容):
new_list = old_list[[0, 3:201, 201::3]]
我可以通过切换到NumPy数组来实现部分功能,但我更感兴趣的是如何对原生Python列表执行此操作。我还可以创建a slice maker或类似的东西,可能还会给出一个等价的切片对象来表示我所需的所有切片的组成。
但我正在寻找不需要创建新类来管理切片的东西。我只想将切片语法连接起来,并将其提供给我的列表,让列表理解这意味着要分别获取切片,并在最后连接它们各自的结果。
推荐答案
切片生成器对象(例如,来自其他问题的SliceMaker
或np.s_
)可以接受多个以逗号分隔的切片;它们作为slice
或其他对象的tuple
接收:
from numpy import s_
s_[0, 3:5, 6::3]
Out[1]: (0, slice(3, 5, None), slice(6, None, 3))
NumPy将其用于多维数组,但您可以将其用于切片串联:
def xslice(arr, slices):
if isinstance(slices, tuple):
return sum((arr[s] if isinstance(s, slice) else [arr[s]] for s in slices), [])
elif isinstance(slices, slice):
return arr[slices]
else:
return [arr[slices]]
xslice(list(range(10)), s_[0, 3:5, 6::3])
Out[1]: [0, 3, 4, 6, 9]
xslice(list(range(10)), s_[1])
Out[2]: [1]
xslice(list(range(10)), s_[:])
Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
这篇关于Python:带间隙的切片的更短语法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Python:带间隙的切片的更短语法?


猜你喜欢
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 沿轴计算直方图 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01