Python 切片中的算术,结束行为
Arithmetic in Python slicing, end behaviour
我想遍历某个切片排列的列表:
l = range(10)
for i in (0,1,2):
print l[i:i + 3]
# [0, 1, 2]
# [1, 2, 3]
# [2, 3, 4]
然而,当我尝试从列表末尾开始执行时,i = 0
失败了
l = range(10)
for i in (0,1,2):
print l[-(i + 3):-i]
# [] // expected: [7, 8, 9]
# [6, 7, 8]
# [5, 6, 7]
我明白为什么这不起作用。
l[-1:]
l[-1:None]
两者都有效,但
l[-1:0]
由于 0
引用了第一个元素而不是 "element after the last element",因此检索了一个空集。
但是我想知道是否有一个解决方案可以实现一个简单的 "iterate from x to end",其中 end
不必特殊处理以防万一我真的到达终点。
上面的例子只是例子,我试图在 NumPy 中赋值所以 l[...].reverse()
等将不起作用。
您可以使用 len(l) - i
代替 -i
:
l = range(10)
for i in (0,1,2):
print l[-(i + 3):len(l) - i]
输出:
[7, 8, 9]
[6, 7, 8]
[5, 6, 7]
您还可以使用步进运算符并反转列表:
for i in (0,1,2):
new_l = l[-1-i:-4-i:-1]
new_l.reverse()
print new_l
一种方法是做一些算术运算以避免使用负索引。
n = len(l)
for i in (0, 1, 2):
j = n - 3 - i;
print l[j: j + 3]
我想遍历某个切片排列的列表:
l = range(10)
for i in (0,1,2):
print l[i:i + 3]
# [0, 1, 2]
# [1, 2, 3]
# [2, 3, 4]
然而,当我尝试从列表末尾开始执行时,i = 0
失败了
l = range(10)
for i in (0,1,2):
print l[-(i + 3):-i]
# [] // expected: [7, 8, 9]
# [6, 7, 8]
# [5, 6, 7]
我明白为什么这不起作用。
l[-1:]
l[-1:None]
两者都有效,但
l[-1:0]
由于 0
引用了第一个元素而不是 "element after the last element",因此检索了一个空集。
但是我想知道是否有一个解决方案可以实现一个简单的 "iterate from x to end",其中 end
不必特殊处理以防万一我真的到达终点。
上面的例子只是例子,我试图在 NumPy 中赋值所以 l[...].reverse()
等将不起作用。
您可以使用 len(l) - i
代替 -i
:
l = range(10)
for i in (0,1,2):
print l[-(i + 3):len(l) - i]
输出:
[7, 8, 9]
[6, 7, 8]
[5, 6, 7]
您还可以使用步进运算符并反转列表:
for i in (0,1,2):
new_l = l[-1-i:-4-i:-1]
new_l.reverse()
print new_l
一种方法是做一些算术运算以避免使用负索引。
n = len(l)
for i in (0, 1, 2):
j = n - 3 - i;
print l[j: j + 3]