Monica_MTF 2023-02-07 21:05 采纳率: 73.9%
浏览 32
已结题

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 <module>
    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'
'''
  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2023-02-07 22:17
    关注
    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))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示