我试图在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.
任何线索?
答案 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
这将按预期生成0
到9
。
现在假设我们尝试使用您正在使用的值:
counter = 2
stop = 5
step = -1
while counter < stop:
print(counter)
counter += step
如果我们实际执行此操作,则会打印2
,然后将-1
添加到1
,然后打印1
并添加-1
要获得0
,那么它将永远是-1
,-2
,依此类推。您必须手动暂停执行以停止无限循环。
如果您将start
或stop
留空,如[: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]
,start
和end
无法正常工作(空step
默认为step
),则Python只会返回一个空序列。