簡體   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