我有下面在其他地方找到的代码,我试图弄清楚如何在到达下一个百位时停止附加到某个范围。
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
答案 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)]