Python|字符串中第二大的数字

问题描述给你一个混合字符串s,请你返回s中第二大的数字,如果不存在第二大的数字,请你返回-1。混合字符串由小写英文字母和数字组成。示例:输入:s = 'dfa12321afd’输出:2解决方案这是一道看似不难的题,但是实际操作会发现有很多难点,比如如何删除掉字符串中的混合英文字母,其次如何解决有重复数字出现的情况,再有如果不存在第二大数字的情况。首先我们可以先遍历这个字符串,但是由于我们要进行删除排序等操作,所以要先把字符串转化为列表。因为我们是要进行遍历以及删除的,所以在遍历过程中如果原列表进行了改变,会导致错误的结果。所以我们要建立一个元素一样的列表,用来遍历,最后返回删除过的列表就可以了。然后我们要进行混合列表的筛选,通过对字符的ASCII码是否在字母的范围中来判断是否需要删除,将删除后的列表进行排序再取第二大的。其中有一个坑就是,如果有相同的数字则会返回错误答案,所以我们利用set可以查重的属性来查找第二大的数字。代码及运行结果如下:

s = input('请输入字符串’)c = list(s)a = list(s)#做改变的for i in s:if ord(i)>= 97 and  ord(i)<=122:a.remove(i)else:continueif len(set(a))>1:print(int(sorted(set(a))[-2]))else:print(-1)另外一种比较快的操作方法就是,运用filter函数的筛选来过滤字母。isdigit()是一个内置,如果字符串只包含数字则返回True,否则返回False。但是这是字符串的内置,最后要返回的是数字,要用int函数改变一下形式。s = 'sekfjis077'digit = filter(str.isdigit, s)  # 过滤英文字母ss = sorted(set(digit))if len(ss) == 1 or len(ss) == 0:print(-1)else:print(int(ss[-2]))结语这道题第二种方法运用了isdight()内置的方法,相比第一种用ASCII码的方法简单了很多,但是需要理解记忆并熟练运用。实习编辑:衡辉作者:窦钟灵、黄荟蓉、高钰婷

(0)

相关推荐