达到特定倍数后从范围中获取下一个值

Get next value from range after reaching specific multiples

我有一个值范围 i 从 1 开始遍历一年中的小时数 (8760)。对于每小时,变量 hour 递增 1,直到达到 24它重新启动的地方。变量 year_day 每 24 小时递增 1。例如

i    hour    year_day
1    1    1
2    2    1
3    3    1
...
23    23  1
24    1   2
25    2   2
...
47    24  2
48    1   3
49    2   3

我正在努力做到,当i = 24时,hour也是24,year_day保持在1。然后当i是下一个值时找到倍数后,hour从1重新开始,year_day加1。换句话说,每次到午夜,hour = 24year_day仍然是前一天。例如

i    hour    year_day
23    23  1
24    24  1
25    1   2
...
47    23  2
48    24  2
49    1   3

代码如下:

hour = 0
year_day = 1
for i in range(1, 8761):
    hour = hour + 1
    if i % 24 == 0:
        hour = 1
        year_day = year_day + 1
    print(i, hour, year_day)

你的代码没问题,你只需要从 hour=1 开始,在 if 语句之前打印。请尝试以下操作:

hour = 1
year_day = 1
for i in range(1, 8761):
    print(i, hour, year_day)
    hour+=1
    if i % 24 == 0:
        hour = 1
        year_day = year_day + 1

输出:

...
21 21 1
22 22 1
23 23 1
24 24 1
25 1 2
26 2 2
27 3 2
...

我对这个问题使用了pandas的方法。代码如下:

import numpy as np
import pandas as pd

i = list(range(1,50))
df = pd.DataFrame(i, columns=["i"])
df["hours"] = df["i"]%24
df["hours"][df["hours"]==0] = 24
df["days"] = (df["i"]//24.1+1).astype(int)
display(df)

输出为:

    i   hours   days
0   1   1       1
1   2   2       1
2   3   3       1
3   4   4       1
4   5   5       1
5   6   6       1
6   7   7       1
7   8   8       1
8   9   9       1
9   10  10      1
10  11  11      1
11  12  12      1
12  13  13      1
13  14  14      1
14  15  15      1
15  16  16      1
16  17  17      1
17  18  18      1
18  19  19      1
19  20  20      1
20  21  21      1
21  22  22      1
22  23  23      1
23  24  24      1
24  25  1       2
25  26  2       2
26  27  3       2
27  28  4       2
28  29  5       2
29  30  6       2
30  31  7       2
31  32  8       2
32  33  9       2
33  34  10      2
34  35  11      2
35  36  12      2
36  37  13      2
37  38  14      2
38  39  15      2
39  40  16      2
40  41  17      2
41  42  18      2
42  43  19      2
43  44  20      2
44  45  21      2
45  46  22      2
46  47  23      2
47  48  24      2
48  49  1       3
hour = 0
year_day = 1
for i in range(1, 8761):
    if i % 24 == 0:
        hour = 0
        year_day += 1
    hour += 1
    print(i, hour, year_day)

Returns:

20 20 1
. . .
24 1 2
25 2 2
. . .
46 23 2
47 24 2
48 1 3