每100个拆分数字范围

时间:2018-07-19 18:43:11

标签: python python-3.x

我有下面在其他地方找到的代码,我试图弄清楚如何在到达下一个百位时停止附加到某个范围。

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

1 个答案:

答案 0 :(得分:1)

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)]