[英]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 33
的multiple of 33
開始。
所以,從100
之后的第一個33
開始,因為range
函數將繼續添加33
以獲得下一個倍數。
要獲得數字num
后33
的第一個倍數,您可以使用: -
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.