Python排序数字返回紧凑形式的字符串

Python#389
函数main()接收一个包含若干自然数的列表,要求对其中的自然数升序排序,然后返回紧凑形式的字符串。
例如,main([5,6,7,8,9,14,13,12,11,23,29,30,39])返回'5-9,11-14,23,29-30,39',
也就是把连续的自然数组合到一起使用减号连接,单个不连续的自然数独立显示,每组之间使用半角逗号分隔。
考点:选择结构与循环结构,排序
我咋感觉要用到排序算法啊……
排序的话有一个sorted()函数排序,但是这个是对字典用的.

def main(numbers):
    #return numbers
    ans=[]
    list.sort(numbers)
    for i in numbers:
        if numbers[i+1]-numbers[i]==1:
            ans.append(i)
            return min(ans)+'-'+max(ans)
        else:
            return i
'''
答题错误!您的代码执行结果为:
Traceback (most recent call last):
  File xxx.py, line 13, in 
    print(main([5, 6, 7, 8, 9, 14, 13, 12, 11, 23, 29, 30, 39]))
  File xxx.py, line 8, in main
    return min(ans)+'-'+max(ans)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
'''
def main(numbers):
    new = sorted(i for i in numbers if i > 0)
    result = []
    n = len(new)
    start = new[0]
    for i in range(n):
        if i == n-1 or new[i+1]-new[i] > 1:
            if new[i] == start:
                result.append(str(start))
            else:
                result.append(str(start)+'-'+str(new[i]))
            if i < n-1: start = new[i+1]
    return ",".join(result)

nums = [5,6,7,8,9,14,13,12,11,23,29,30,39]
print(main(nums))

是的,先排序。
你的字符串拼接,需要先将整数转换成字符串。


def main(numbers):
    #return numbers
    ans=[]
    list.sort(numbers)
    for i in numbers:
        if numbers[i+1]-numbers[i]==1:
            ans.append(i)
            return str(min(ans))+'-'+str(max(ans))
        else:
            return i

如果有用,望采纳,谢谢!