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