当前位置: 首页 > 面试题库 >

Python:带间隙的切片的语法较短?

邓越泽
2023-03-14
问题内容

假设我想从Python的列表中将第一个元素,第3个元素到第200个元素以及第201个元素到最后一个元素以3步为步长。

一种方法是使用独特的索引编制和串联:

new_list = old_list[0:1] + old_list[3:201] + old_list[201::3]

有没有办法只用一个索引就可以做到这一点old_list?我想要类似以下的内容(我知道这在语法上不起作用,因为列表索引不能为列表,并且不幸的是,Python没有切片文字;我只是在寻找更接近的东西):

new_list = old_list[[0, 3:201, 201::3]]

我可以通过切换到NumPy数组来实现其中的一些功能,但我对如何对本机Python列表执行此操作更感兴趣。我还可以创建一个切片器或类似的东西,并且可能用强壮的手臂为我提供一个等效的切片对象,以表示所有所需切片的组成。

但是我正在寻找不涉及创建新类来管理切片的东西。我只想将切片语法进行连接,然后将其提供给我的列表,并使列表理解这意味着分别获取切片并最终连接其各自的结果。


问题答案:

切片器对象(例如,SliceMaker来自其他问题或np.s_)可以接受多个逗号分隔的切片;它们被接收为tuplesliceS或其它目的:

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]


 类似资料:
  • 今天我注册了adMob,开始在我的应用程序中制作adMob广告。第一个是一个游戏(带有viewcontrollers),我想在游戏结束后在屏幕上显示一个间隙广告,所以我想在游戏结束后加载间隙广告(只有在游戏结束后才能访问此视图,并且游戏持续一分钟,所以它不应该出现得太频繁) 我看过很多教程,在youtube和admob网站上,我有很多问题,比如:即使我导入了它,也找不到admob框架,我在构建时禁

  • 问题内容: 我是Go编程的新手。我已经阅读了Go编程书籍,其中的内容由三部分组成:指向数组的指针,长度和容量。 我对nil slices(切片没有指向len的下层数组,len = 0,cap = 0),非lens切片(其中只有len = 0,cap = 0)和空切片之间感到困惑。 谁能告诉我nil和空片是否相同?如果两者都不相同,那么请说出两者之间的区别是什么? 如何测试切片是否为空? 另外,指针

  • 我是一个编程新手。我在go编程书中读到过,片由三部分组成:指向数组的指针、长度和容量。 我感到困惑的零切片(切片没有底层数组指向,len=0,cap=0),非零切片只有len=0,cap=0和空切片。 谁能告诉我零和空切片是否是一回事?如果它们都不同,那么请告诉这两者之间的区别是什么? 如何测试一个切片是否为空? 另外,指针在长度和容量为零的非nil片中保留什么值?

  • 问题内容: 我偶尔会看到像这样的Python代码中使用的列表切片语法: 当然,这与以下内容相同: 还是我错过了什么? 问题答案: 就像NXC所说的,Python变量名实际上指向一个对象,而不是内存中的特定位置。 会创建两个指向同一对象的不同变量,因此,更改也会更改。 但是,当您这样做时,它将“切片”列表,并创建一个新列表。的默认值为0,并且位于列表的末尾,因此它将复制所有内容。因此,它使用第一个中

  • 本位主要介绍一下 Go 语言中可变长度的"数组"——切片(slice)。数组有数组的用处,但是其不可变长度的特性,注定了在大多场景下不是很受欢迎。在大多数场景下我们都会选择更加灵活的切片。 1. 切片的创建 切片的声明方式和数组类似,写法上看就是声明一个没有长度的数组:var 切片名 []切片类型。其中切片类型可以是切片本身,也就是切片的切片,就构成了多维的切片。 切片在使用之前必须要初始化,它没

  • 主要内容:从数组或切片生成新的切片,直接声明新的切片,使用 make() 函数构造切片切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/ C++ 中的数组类型,或者 Python 中的 list 类型),这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。 Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合,如果将数据集合比作切糕的话,切片就是你要的“