我需要从像 [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)])
你知道为什么它不起作用吗?是否有办法让它起作用,或者可能有其他方法来达到相同的结果?
最佳答案
如果您阅读 slicings 的语法, proper_slice 中的冒号 (:
)只是一个语法元素,而不是运算符或类似的东西。因此它不能用于其他表达式(即本例中的条件表达式)。
相反,我建议移动条件表达式并使用如下所示的解包:
start, end = (i, index) if i < index else (index, i)
print(lst[start:end])
另一个选择是保持相同的结构并使用 slice
,它创建一个与切片语法等效的对象:
print(lst[slice(i, index) if i < index else slice(index, i)])
您可以再次在此处使用解包以避免重复名称 slice
:
print(lst[slice(*(i, index) if i < index else (index, i))])
关于python - 为什么我不能在条件表达式中放入切片,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77118449/