每百分位数范围

2024-06-08 21:22:00 发布

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

我有下面的代码,我在别处找到的,我试图找出如何让它停止附加到一个范围,如果它达到下一个100。你知道吗

RI将有一个类似于[600-650、700-820、850-870、1700-2120]的列表,我希望它变成[600-650、700-799、800-820、850-870、1700-1799、1800-1899、1900-1999、2000-2099、2100-2120]

我想我可以看看最后两个数字是不是99,如果是的话,停下来再从下一个数字开始。我不知道该怎么实施。你知道吗

代码如下:

def get_line_numbers_concat(line_nums):
    seq = []
    final = []
    last = 0

    for index, val in enumerate(line_nums):

        if last + 1 == val or index == 0:
            seq.append(val)
            last = val
        else:
            if len(seq) > 1:
               final.append(str(seq[0]) + '-' + str(seq[len(seq)-1]))
            else:
               final.append(str(seq[0]))
            seq = []
            seq.append(val)
            last = val

        if index == len(line_nums) - 1:
            if len(seq) > 1:
                final.append(str(seq[0]) + '-' + str(seq[len(seq)-1]))
            else:
                final.append(str(seq[0]))

    final_str = ', '.join(map(str, final))
    return final_str

Tags: 代码indexlenifline数字valelse
1条回答
网友
1楼 · 发布于 2024-06-08 21:22:00
def convert_range_every_hundred(ranges):
    ranges.sort()
    for begin, end in ranges:
        while (begin // 100 + 1) * 100 - 1 < end:
            yield begin, (begin // 100 + 1) * 100 - 1
            begin = (begin // 100 + 1) * 100
        yield begin, end

测试:

my_list = [
    (600, 650), 
    (700, 820),
    (850, 870), 
    (1700, 2120),
]

result = list(convert_range_every_hundred(my_list))
print(result)

打印:

[(600, 650),
 (700, 799),
 (800, 820),
 (850, 870),
 (1700, 1799),
 (1800, 1899),
 (1900, 1999),
 (2000, 2099),
 (2100, 2120)]

相关问题 更多 >