python 7.11 练习
Posted AdyB
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 7.11 练习相关的知识,希望对你有一定的参考价值。
1. 返回列表中出现最多的数字, 如果出现的次数一样多,返回数值大的那个
def highest_rank(arr): a = max([arr.count(i) for i in arr]) b = set() for i in arr: if arr.count(i) == a: b.add(i) return max(b) print(highest_rank([12, 10, 8, 12, 7, 6, 4, 10, 12,11,11,11])) #12
def highest_rank(arr): return sorted(arr,key=lambda x: (arr.count(x),x))[-1] # sorted(iterable, cmp=None, key=None, reverse=False) # iterable 可迭代对象 #cmp:比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。 #key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 #reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认) # 此题中 key = lambda x: (arr.count(x),x) 即排序不仅升序排,还按照出现的次数排
2. 找出两句话中不同的部分, 要求字母为小写 小于等于1个的不考虑,排序 1. 长度,2. 开头数字,3.字母表
即
mix(" In many languages", " there‘s a pair of functions") #"1:aaa/1:nnn/1:gg/2:ee/2:ff/2:ii/2:oo/2:rr/2:ss/2:tt")
自己写的
def lowa(s): l = [] for i in s: if ord(i) > 96 and ord(i) != 32: l.append(i) return sorted(l,key=lambda x: (l.count(x),x),reverse=True) def mix(s1, s2): l1 = lowa(s1) l2 = lowa(s2) l = [] while l1 != []: a = l1[0] if l1.count(a) >1 or l2.count(a)>1: if l1.count(a)> l2.count(a): l.append(‘1:‘+ (a* l1.count(a))) elif l1.count(a) == l2.count(a): l.append(‘=:‘+(a* l1.count(a))) else: l.append(‘2:‘+(a * l2.count(a))) l1 = [x for x in l1 if x != a] l2 = [y for y in l2 if y != a] else: l1 = [x for x in l1 if x != a] l2 = [y for y in l2 if y != a] while l2 != []: if l2.count(l2[0])>1: l.append(‘2:‘ + (l2[0] * l2.count(l2[0]))) l2 = [y for y in l2 if y != l2[0]] else: l2 = [y for y in l2 if y != l2[0]] w = sorted(l,key= lambda x:(-len(x),ord(x[0]),ord(x[-1])),) d = ‘/‘.join(w) return d
别人写的
from collections import Counter def mix(s1, s2): c1 = Counter(filter(str.islower, s1)) # 注意filter 和Counter :Counter 生成字典 {‘e‘,5} 指 e 有5个 c2 = Counter(filter(str.islower, s2)) res = [] s= set(c1.keys() | c2.keys()) for c in s: n1, n2 = c1.get(c, 0), c2.get(c, 0) # 如果有c 返回c1当中相应的key 值,如果没有返回0 if n1 > 1 or n2 > 1: res.append((‘1‘, c, n1) if n1 > n2 else (‘2‘, c, n2) if n2 > n1 else (‘=‘, c, n1)) res = [‘{}:{}‘.format(i, c * n) for i, c, n in res] # !!!!生成格式 return ‘/‘.join(sorted(res, key=lambda s: (-len(s), s)))
以上是关于python 7.11 练习的主要内容,如果未能解决你的问题,请参考以下文章