实现输入一组大于等于0的整数,根据从小到大的顺序去重排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数

输入:一组大于0的整数,不考虑非法输入,各个整数之间以(‘,’)分隔,输入字符串的总长度小于等于100个字节。

输出:排序后的值,各个整数之间以(‘,’)分隔。

样例输入:1,4,3,88,2,88,90,100

样例输出:1,4,88,90,100

num_str = str(input('输入字符串,字符串之间用逗号隔开:\n'))
num_list = num_str.split(',', -1)
num_list = set(num_list) #根据set函数特性去重
num_int_list = list(map(int, num_list))
print('去重后', num_int_list)
num_int_list.sort() #排序函数调用
print('排序后', num_int_list)
length = len(num_int_list)
n = 0
result = []  #结果放入到result列表中
while n < length-1:
    if num_int_list[n] == num_int_list[n+1] - 1:
        #star记录连续数字的开始下标
        star = n
        nums = num_int_list[star]
        while (n+1<length and num_int_list[n] == num_int_list[n+1]-1):
            n += 1
        # end记录连续数字的末尾
        end = n
        #数字的末尾存入到nume
        nume = num_int_list[end]
        #将符合条件的连续数字的两段数字存入result
        result.append(nums)
        result.append(nume)
        n += 1
    else:
        #将其余间断的数字直接存入result
        gap = num_int_list[n]
        result.append(gap)
        n += 1
#判断n是否是最后一位数字,是则打印
if n == length-1:
    last = num_int_list[n]
    result.append(last)
print('最终结果', result)

注意判断下标,防止越界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alocus_

如果我的内容帮助到你,打赏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值