在python

时间:2015-12-04 10:15:10

标签: python reverse slice

我试图在python中反转切片的一部分,但它返回一个空列表。但是当我尝试整个列表时,它工作正常。我在这里错过了什么吗?

l=[1,2,3,4,5,6,7,8]
l[::-1]=[8, 7, 6, 5, 4, 3, 2, 1]     <<< This worked fine.

l[2:5]=[3, 4, 5]
l[2:5:-1]=[]       <<< Expecting [5,4,3] here.

任何线索?

2 个答案:

答案 0 :(得分:5)

语法总是[start:end:step]所以如果你倒退,你的开始需要大于结束。还要记住它包括start和excludes end,所以你需要在交换开始和结束后减去1。

l[5:2:-1]= [6, 5, 4]
l[4:1:-1]= [5, 4, 3]

答案 1 :(得分:0)

切片表示法是[start:stop:step]。这意味着&#34;从start开始,然后再增加step,直到您到达end。&#34;它类似于这个结构:

counter = 0
stop = 10
step = 1
while counter < stop:
    print(counter)
    counter += step

这将按预期生成09

现在假设我们尝试使用您正在使用的值:

counter = 2
stop = 5
step = -1
while counter < stop:
    print(counter)
    counter += step

如果我们实际执行此操作,则会打印2,然后将-1添加到1,然后打印1并添加-1要获得0,那么它将永远是-1-2,依此类推。您必须手动暂停执行以停止无限循环。

如果您将startstop留空,如[:4][::-1],则表示序列的开头或结尾,由{{1确定}}。 Python将以正面step向后展开,向后展示为负step(尝试使用step step会产生错误。)

0

如果您指定了>>> l[2::] [3, 4, 5, 6, 7, 8] >>> l[2::-1] [3, 2, 1] >>> l[:2:] [1, 2] >>> l[:2:-1] [8, 7, 6, 5, 4] startend无法正常工作(空step默认为step),则Python只会返回一个空序列。