假设我有:
>>> a = [1, 2, 3, 4]
我想要一个反转的切片。假设我想要给出第 1 个和第 0 个元素start_idx = 1
and stop_idx = 0
:
[2, 1]
使用切片符号:
a[x:y:z]
我用什么值x
, y
, and z
using start_idx
and stop_idx
?
我试过了:
>>> a[start_idx:stop_idx:-1]
[2]
>>> a[start_idx:stop_idx-1:-1]
[]
差异化:
这个问题是关于一个带有负步长的切片,其中应该包含开始和结束索引元素(就像数学中的闭区间),并且切片结束索引是动态计算的。
理解Python的切片表示法 https://stackoverflow.com/questions/509211/understanding-pythons-slice-notation是一个关于符号的通用问题:什么x
, y
, and z
意思是a[x:y:z]。它没有提到逆转的情况。
这个问题与其他标记的重复问题不同,因为它处理一般情况,其中反转切片开始和结束索引是通过变量计算或给出的,而不是硬编码的。
如果您希望反转间隔以索引 0 结束,则可以在切片时省略第二个索引。
a = [1, 2, 3, 4]
a[1::-1] # [2, 1]
一般来说,每当您的最终索引为零时,您都希望将其替换为None
,否则你想减少它。
由于索引算法的原因,我们必须单独处理这些情况,以与通常的切片行为保持一致。这可以通过三元表达式巧妙地完成。
def reversed_interval(lst, i=None, j=None):
return lst[j:i - 1 if i else None:-1]
reversed_interval([1, 2, 3, 4], 0, 1) # [2, 1]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)