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

时间:2018-08-28 22:43:43

标签: python python-3.x

我确定必须先问过这个问题,但是抱歉,找不到类似的东西。

假设我有一个数字列表[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,您可以算出:“四个,三个,七个,六个”。

我看不出这有多难。对我来说,这似乎是一个非常简单且常见的问题。

2 个答案:

答案 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
相关问题