我确定必须先问过这个问题,但是抱歉,找不到类似的东西。
假设我有一个数字列表[1..24]
:
numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
我想制作一个接受两个整数的函数:mynum
是列表中的数字,而modifier
。然后它将在列表中找到mynum
,然后在列表modifier
的位置数之间循环(如果为正,则为右边;如果为负,则为左边)。如果到达列表的末尾,它将循环到另一侧。
我现在想要的是基本上根据列表中的输入来移动数字mynum
。
示例:
shift_function(2, 1) # returns 3
shift_function(23, 3) # returns 2
shift_function(4, -8) # returns 20
shift_function(15, 51) # returns 18
如何在这样的列表末尾循环显示?
我考虑过使用time
模块来获取一个以mynum
作为当前时间的时间,然后在其中加上/减去modifier
小时。这将适用于我的[1..24]
范围,但是我正在寻找一个更通用的解决方案,这似乎是一个简单的问题。
编辑:为了进一步说明,我只想遍历数字列表。如果到达终点,则从头开始,同样向后。
Edit2 :我不知道我还要清楚多少。想象一下您的办公桌上有很多数字:3,4,5,6,7。然后从5开始,向右走modifier
步骤,比方说3个步骤。因此,您数:“六个,七个,三个”,从头开始。如果modifier
为负,则倒数。例如。使用-4
,您可以算出:“四个,三个,七个,六个”。
我看不出这有多难。对我来说,这似乎是一个非常简单且常见的问题。
答案 0 :(得分:4)
看起来像此功能可以满足您的需求:
def shift_function(n, shift):
return numbers[(numbers.index(n) + shift) % len(numbers)]
答案 1 :(得分:3)
您可以使用np.roll
使用numpy
进行此操作。请注意,负数实际上是相对于您想要的负数,因此可以使用-modifier
代替:
import numpy as np
numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
mynum = 4
modifier = -8
>>> np.roll(numbers,-modifier)[numbers.index(mynum)]
20
mynum = 15
modifier = 51
>>> np.roll(numbers,-modifier)[numbers.index(mynum)]
18