[英]Count up/down within a specific number range using Python
我敢肯定以前肯定有人问过这个问题,但我找不到类似的东西,抱歉。
假设我有一个数字列表[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
在列表中找到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
计算:“四、三、七、六”。
我不明白这怎么这么难得到。 对我来说似乎是一个非常简单和常见的问题。
看起来这个函数做了你想要的:
def shift_function(n, shift):
return numbers[(numbers.index(n) + shift) % len(numbers)]
您可以使用numpy
执行此操作,使用np.roll
。 请注意,负数实际上与您想要的相反,因此您可以使用-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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.