假设我有一张单子
a=[0,1,2,3,4,5,6,7,8,9]
我随机选择一个索引
i = np.random.choice(np.arange(a.size))
现在,我想在I周围选择一个对称的间隔,比如2。例如,对于给定的列表,如果选择了索引i = 5
,我会得到如下结果
print(a[i-2:i+2+1])
>> [3, 4, 5, 6, 7]
这个很好用
但是,如果我恰好在某个端点附近,i = 1
。利用我所拥有的
print(a[i-2:i+2+1])
>> []
相反,我希望它打印一个非对称的间隔,比如[0, 1, 2, 3]
如果i=8
print(a[i-2:i+2+1])
>> [6, 7, 8, 9]
就像我也想那样,所以接近终点似乎并不重要。我得到的最接近解是(假设I=1)
print([a[0:i+3] if a[i-2:i+2+1] == [] else a[i-2:i+2+1] ])
>> [[0, 1, 2, 3]]
但它返回的是[[0,1,2,3]]
,而不是[0,1,2,3]
在python/numpy中,有没有一种很好的方法可以使用列表理解或其他方法来实现这一点?你知道吗
您已经跳过了Python的右端编号。你给了它限制[-1:3],但是
-1
表示右边的元素。因为“first”元素超过了“last”元素,所以得到的切片是0。在高指数上你不会有这个问题,因为在这一端没有“环绕”。你知道吗只需使用
max
将较低的索引设置为0。你知道吗你只需要把下面的索引剪辑成0:
如果没有这个,它会变成负数。这在切片中有特殊的意义:负索引从列表的端开始计数。你知道吗
问题是,当您退出列表的边界时,它返回一个空列表。尝试:
我只是给它设置了最大/最小界限,这样它就不会逃逸了。不是很像Python,但这是一个快速解决办法。你知道吗
相关问题 更多 >
编程相关推荐