在python中添加多个切片

2024-09-27 21:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个数组中得到x[start1:stop1:step1 ]和{}的切片。在

Python中是否有这样的语法:

x[start1:stop1:step1  +  start2:stop2:step2]

在Matlab中,它很简单:

^{pr2}$


更新:

我看到很多答案都暗示着串联。在

我最初的目标是对高维数组进行切片,例如在2D中:

x[start1:stop1 +  start2:stop2,  start3:stop3  +  start4:stop4]

串联是可以的。但在高维中似乎太复杂了。在

有没有一种方法像Matlab一样简单?在

x(start1:stop1  start2:stop2, start3:stop3  start4:stop4 )

我们可以连接数组索引而不是数组本身吗?

see my solution below

the Tartan


Tags: 语法切片数组matlabstep1pr2step2start1
3条回答

将两个列表串联起来,如Jonas's answer,是最简单的解决方案,通常也是最好的解决方案。在

如果你担心做临时列表,你可以做一些稍微复杂一点的事情,比如:

[elem for i, elem in enumerate(x) 
 if i in range(start1, stop1, step1) or i in range(start2, stop2, step2)]

…或:

^{pr2}$

然而,我预计其中任何一个都会慢得多,除非这两个子列表太大,以至于内存分配时间占据了所有事情,当然,它们要复杂得多,可读性也差得多。在

这两种解决方案的唯一真正优势是,如果您实际上不需要列表,则可以轻松地将它们转换为惰性迭代器:

(elem for i, elem in enumerate(x) 
 if i in range(start1, stop1, step1) or i in range(start2, stop2, step2))

itertools.chain(itertools.islice(x, start1, stop1, step1),
                itertools.islice(x, start2, stop2, step2))

(事实上,第二个是Jonas的答案的懒惰等价物:islice(x, start1, stop1, step1)和{}做了相同的事情,chain(a, b)和{}做了相同的事情。)

这个操作在python中也非常简单。一旦您定义了列表,您可以这样做:

new_list = lst[start1:stop1:step1] + lst[start2:stop2:step2]

希望这有帮助。在

您可以像这样连接两个数组(列表):x[start1:stop1:step1] + x[start2:stop2:step2]

相关问题 更多 >

    热门问题