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

标签 python slice

我需要从像 [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/

相关文章:

python - 类似于 pandas 数据框的字符串的字典列表

python - 在 Django 中,如何从单个表单字段填充通用关系?

python - Pandas 滚动时间窗口因字符串计数而失败 - 为什么?

python - 选择不同长度的数字

go - 在 go routine 中追加 slice

dictionary - Go中的 map 初始化

python - numpy 数组中的数字有何含义?

python - 如何使用 python 计算出不同客户特定月份后的平均值?

golang,如何计算结构类型接口(interface){}中的元素?

for-loop - 如何摆脱 Go 中 int slice 中的零值?