我需要从像
[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中对变量使用切片。切片语法需要起始索引和结束索引的常量值。
要达到想要的效果,可以稍微修改一下原来的代码。您可以使用列表串联手动构造子列表,而不是使用切片。这是代码的更新版本:
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]