繁体   English   中英

使用 Python 在特定数字范围内向上/向下计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM