簡體   English   中英

變量+ =%可能或如何獲得另一個數字之后的數字的下一個間隔

[英]variable +=% possible or how to get the next interval of a number after another number

我希望能夠做類似以下的事情......

假設我想要一個100-500的每個數字的列表,它是33的倍數。

>>> a = 100
>>> b = 500
>>> range(a,b,33)
[100, 133, 166, 199, 232, 265, 298, 331, 364, 397, 430, 463, 496]

這不是我想要的,這是因為a不是33的倍數。

從獲得的33的倍數a我可以這樣做:

a = a - a % 33 + 33

我想知道是否有更簡單的方法來做到這一點,如果我想在不知道實際值的情況下創建這個范圍而不必事先定義它們。

如:

>>> def multiple(a, b, c):
    return range(a+=%c, b, c) #if this was possible

顯然它會返回一個正確的范圍,例如:

>>> multiple(100, 500, 33)
[132, 165, 198, 231, 264, 297, 330, 363, 396, 429, 462, 495]

我知道我可以做一些簡單的事情:

range(a - a%c + c, b, c)

然而,如果沒有進入細節,稱值a對我來說是昂貴的在我的情況,我希望能夠找到一種方法,沒有把它稱為第二次,而且上面的方法真的不是很好看着所有人。

我真的不確定我的問題的標題應該是什么,但我想我正在尋找的是一種方法來找到另一個給定數字之后的數字的下一個數字。

謝謝。

下面,你想要做什么,只用a一次:

In [4]: range((a + c - 1) // c * c, b + 1, c)
Out[4]: [132, 165, 198, 231, 264, 297, 330, 363, 396, 429, 462, 495]

我還是把它放到一個輔助功能,使實際意義的多少倍的問題a被使用。

與您問題中的代碼不同,這實際上適用於a可被c整除的情況。 此外,與您問題中的代碼不同,它包含范圍內的b (根據您在評論中對我的問題的回答,應該如此):

In [15]: range((a + c - 1) // c * c, b + 1, c)
Out[15]: [66, 99, 132]

好吧,要獲得每次33的倍數,你需要從multiple of 33multiple of 33開始。

所以,從100之后的第一個33開始,因為range函數將繼續添加33以獲得下一個倍數。

要獲得數字num33的第一個倍數,您可以使用: -

num / 33 * 33 + 33  <==>  (num / 33 + 1) * 33

因此,對於您的范圍,您可以使用: -

>>> a = 100
>>> b = 500
>>> a = (a / 33 + 1) * 33
>>> range(a, b, 33)
[132, 165, 198, 231, 264, 297, 330, 363, 396, 429, 462, 495]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM