创建byteranges(用于请求部分数据)

2024-03-28 23:53:19 发布

您现在位置:Python中文网/ 问答频道 /正文

total_byte_len = 954
part_size_limit = 250

Result: #[star_byte, end_byte, bytes_in_part] with 0-based index
[[0, 250, 250], [251, 501, 250], [501, 751, 250], [751, 953, 202]]

我已经有了一个函数,但它非常粗糙和不可靠(quick-n-dirty),它大约有15行,所以我很想看看list comprehension/或lambda在这里能做什么=)

如果你们坚持,这是我的版本: 请注意,我当时并没有考虑太多,只是一些尽快会奏效的东西。:)弃用通知!:<;==

^{pr2}$

Tags: 函数insizeindexlenbyteswithresult
3条回答

您的输出不正确,因为sum([250, 249, 249, 202]) != 954。在

$ python3
>>> def fun(x, y):
...     f= lambda i: y if (x-i)>=y else x%y
...     return [[i, i+f(i)-1, f(i)] for i in range(0, x, y)]
...
>>> fun(954, 250)
[[0, 249, 250], [250, 499, 250], [500, 749, 250], [750, 953, 204]]

冗长但可读的版本:

s = []
for p in range(0, total_byte_len, part_size_limit):
    last = min(total_byte_len - 1, p + part_size_limit - 1)
    s.append([p, last, last - p + 1])

您的示例有点偏离(第二部分有251个字节),但类似这样的方法可以工作:

[[x, y - 1, y - x] for x in range(0,total_byte_len, part_size_limit) for y in [min(x + part_size_limit, total_byte_len)]]

你也应该创建一个元组列表。在

相关问题 更多 >