为什么我不能在条件表达式中放入切片,我该怎么办?

问题描述 投票:0回答:1

我需要从像

[1,2,3,4,5,6]
这样的列表和像
2
这样的索引号中获取这样的一系列列表:

[1,2]
[2]
[]
[3]
[3,4]
[3,4,5]
[3,4,5,6]

我发现这 for 循环有效

lst = [1,2,3,4,5,6]
index = 2
for i in range(len(lst)+1):
    print(lst[(i if i<index else index):(index if i<index else i)])

但这种简化形式却没有

lst = [1,2,3,4,5,6]
index = 2
for i in range(len(lst)+1):
    print(lst[(i:index) if i<index else (index:i)])

你知道为什么它不起作用吗?是否有办法让它起作用,或者也许有其他方法可以达到相同的结果?

python slice
1个回答
-1
投票

简化形式不起作用的原因是你不能在Python中对变量使用切片。切片语法需要起始索引和结束索引的常量值。

要达到想要的效果,可以稍微修改一下原来的代码。您可以使用列表串联手动构造子列表,而不是使用切片。这是代码的更新版本:

lst = [1,2,3,4,5,6]
index = 2
for i in range(len(lst)+1):
    sublist = lst[:index]
    if i > index:
        sublist += lst[index:i]
    print(sublist)

这将产生您所描述的输出:

[1, 2]
[2]
[]
[3]
[3, 4]
[3, 4, 5]
[3, 4, 5, 6]
© www.soinside.com 2019 - 2024. All rights reserved.