切片 python 列表超出其长度
slicing python list beyond its length
我必须将 Python list/numpy 数组从索引切片到 -dx 和 +dx。
其中 dx 是常数。例如:
(其中包含1的position/index只是为了说明,作为中心索引)。
A = [0, 0, 0, 0, 1, 0, 0, 0, 0]
dx=3
print(A[4-dx: 4+dx+1]) # 4 is the position of '1'
>>>[0, 0, 0, 1, 0, 0, 0]
但是对于这种情况,
B = [0, 1, 0, 0, 0 ,0, 0 ,0, 0]
print(B[1-dx: 1+dx+1])
>>>[] # because 1-dx <0.
但我需要的案例 B 是 [0, 1, 0, 0, 0]
所以我做了这样的事情,以防止空 list/array,说 n
是中心索引:
if n-dx <0:
result= B[:n+dx+1]
虽然上面的方法没问题。
原代码比较复杂,到处都要放这个if...#complicated version#
还有其他办法吗?也许我错过了什么。
谢谢!
您可以使用 max()
函数将索引绑定到 0
。
print(A[max(0,4-dx): 4+dx+1])
我必须将 Python list/numpy 数组从索引切片到 -dx 和 +dx。 其中 dx 是常数。例如: (其中包含1的position/index只是为了说明,作为中心索引)。
A = [0, 0, 0, 0, 1, 0, 0, 0, 0]
dx=3
print(A[4-dx: 4+dx+1]) # 4 is the position of '1'
>>>[0, 0, 0, 1, 0, 0, 0]
但是对于这种情况,
B = [0, 1, 0, 0, 0 ,0, 0 ,0, 0]
print(B[1-dx: 1+dx+1])
>>>[] # because 1-dx <0.
但我需要的案例 B 是 [0, 1, 0, 0, 0]
所以我做了这样的事情,以防止空 list/array,说 n
是中心索引:
if n-dx <0:
result= B[:n+dx+1]
虽然上面的方法没问题。
原代码比较复杂,到处都要放这个if...#complicated version#
还有其他办法吗?也许我错过了什么。
谢谢!
您可以使用 max()
函数将索引绑定到 0
。
print(A[max(0,4-dx): 4+dx+1])