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 nslt的可用模型,或者其他可以进行推理的现有模型
  • ¥15 arduino上连sim900a实现连接mqtt服务器
  • ¥15 vncviewer7.0安装后如何正确注册License许可证,激活使用
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并2
  • ¥66 关于人体营养与饮食规划的线性规划模型
  • ¥15 基于深度学习的快递面单识别系统
  • ¥15 Multisim仿真设计地铁到站提醒电路
  • ¥15 怎么用一个500W电源给5台60W的电脑供电
  • ¥15 请推荐一个轻量级规则引擎,配合流程引擎使用,规则引擎负责判断出符合规则的流程引擎模板id
  • ¥15 Excel表只有年月怎么计算年龄