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]]
但我正在寻找不需要创建新类来管理切片的东西。我只想将切片语法连接起来,并将其提供给我的列表,让列表理解这意味着要分别获取切片,并在最后连接它们各自的结果。
推荐答案
切片生成器对象(例如,来自其他问题的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:带间隙的切片的更短语法?
 
				
         
 
            
        基础教程推荐
             猜你喜欢
        
	     - 包装空间模型 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
				 
				 
				 
				