0

这可能很愚蠢。我现在无法弄清楚。

有一个总数 (x)

哪个需要与(y)平分

如果 x 是 10,000 而 y 是 10,

这意味着 10,000 将在 10 之间吐出。

如何找到起点

1 starts at 1 and ends 1,000
2 starts at 1,001 & ends 2,000
3 ..
4 ..
5 ..
4

1 回答 1

7

这实际上只是一些简单的数学运算:

x = 10000
y = 10
print([(item, item+(x//y-1)) for item in range(1, x, x//y)])

给我们:

[(1, 1000), (1001, 2000), (2001, 3000), (3001, 4000), (4001, 5000), (5001, 6000), (6001, 7000), (7001, 8000), (8001, 9000), (9001, 10000)]

在这里,我们使用内置range()函数列表推导

这通过使用range()内置函数从1到 下面构造一个生成器x,采用x除法(整数除法,所以我们没有得到浮点数)的步骤来工作y

然后我们使用列表推导来获取这些值(1, 1001, 2001, ..., 9001),然后将它们放入元组对,将(x//y-1)(在这种情况下999)添加到值以获得结束边界。

自然,例如,如果您想在循环中使用它,最好使用生成器表达式,以便在列表推导上懒惰地评估它。例如:

>>> for number, (start, end) in enumerate((item, item+(x//y-1)) for item in range(1, x, x//y)): 
...     print(number, "starts at", start, "and ends at", end)
... 
0 starts at 1 and ends at 1000
1 starts at 1001 and ends at 2000
2 starts at 2001 and ends at 3000
3 starts at 3001 and ends at 4000
4 starts at 4001 and ends at 5000
5 starts at 5001 and ends at 6000
6 starts at 6001 and ends at 7000
7 starts at 7001 and ends at 8000
8 starts at 8001 and ends at 9000
9 starts at 9001 and ends at 10000
于 2012-05-13T12:02:15.803 回答