使用“ - ”(python)合并数字

时间:2015-03-13 08:07:29

标签: python for-loop

这是python

temp_list=['1','2','3','5','7','8']
temp_list.sort()
print temp_list
test=""
first=""
last=""
start=0
for i in range(len(temp_list)):
    if i==0:
        None
    else:
        if (int(temp_list[i-1])+1)==int(temp_list[i]):
            print temp_list[i-1]
            print temp_list[i]
            if start==0:
                first=temp_list[i-1]
                last=temp_list[i]
                start=1;
            else:
                last=temp_list[i]
            if len(temp_list)==i+1:
                if start==0:
                    test+=(temp_list[i-1]+","+temp_list[i])
                else:
                    if len(test)!=0:#add
                        test+=(","+first+"-"+last)
                        start=0
                    else:
                        test+=(first+"-"+last)
                        start=0
        else:
            if start==0:
                test+=(temp_list[i-1]+","+temp_list[i])
            else:
                if len(test)!=0:#add
                    test+=(","+first+"-"+last)
                    start=0
                else:
                    test+=(first+"-"+last)
                    start=0
print test

这是示例代码 这个结果 - > 1-35,7,7-8

我想转换后面的数字集:

EX1) [' 1',' 2',' 3',' 5',' 7',' 8'] - > 1-3,5,7-8

EX2) [' 0',' 2',' 3',' 4',' 5',' 7',' 8'] - > 0,2-5,7-8

请帮助我的大脑

1 个答案:

答案 0 :(得分:2)

这应该有效:

def ints_to_ranges(l):
    if not l: return ""

    l = sorted(set(int(n) for n in l))
    ranges = [[l[0], l[0]]]

    for n in l[1:]:
       if n - 1 == ranges[-1][1]:
           ranges[-1][1] += 1
       else:
           ranges.append([n, n])

    return ",".join(r[0] == r[1] and str(r[0]) or "{}-{}".format(*r) for r in ranges)

它的工作原理是删除重复的数字,对它们进行排序,构建一个范围列表,然后格式化它们。例如:

>>> ints_to_ranges(['1', '2', '3', '5', '7', '8'])
'1-3,5,7-8'
>>> ints_to_ranges(['0', '2', '3', '4', '5', '7', '8'])
'0,2-5,7-8'