zoukankan      html  css  js  c++  java
  • python max()用法

    起因是看到一道面试题
    “统计字符串中出现次数最多的字符,并返回出现次数”

    问题很简单,刚开始没思路,只想到了循环统计,但是觉得太蠢了,直到我发现了max()的key用法,果然还是我之前学的太浅了~

    s="zxcvbnmasdaasdafa"
    max_s = max(s,key=s.count) # 返回出现次数最多的字符
    s.count(max_s) # 返回次数
    

    相关知识点:

    max(iterable, *[, key, default])

    官方文档是这么写,写的还是很详细:

    返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。
    如果只提供了一个位置参数,它必须是非空 iterable,返回可迭代对象中最大的元素;如果提供了两个及以上的位置参数,则返回最大的位置参数。
    有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给 list.sort() 的。default 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 default ,则会触发 ValueError。
    如果有多个最大元素,则此函数将返回第一个找到的。这和其他稳定排序工具如 sorted(iterable, key=keyfunc, reverse=True)[0] 和 heapq.nlargest(1, iterable, key=keyfunc) 保持一致。
    3.4 新版功能: keyword-only 实参 default 。
    在 3.8 版更改: key 可以为 None。

    max(s,key=s.count)
    key接受一个函数对象,引用s.count函数,s中的每一个字符均会传入s.count(sub, start= 0,end=len(string))函数,并对所有字符的计算结果进行max()计算。



    P.S.这种解法有个不太好的地方,如果有两个字符出现的次数一样,仅能返回第一个找到的字符
    s = "asdf zxcva12q awww"
    只会返回"a",但是其实"w"和"a"出现的次数一样,都是3
    还有另一种解法
    利用colletions模块

    from collections import Counter
    c = Counter(s)
    c.most_common()  
    
    # 输出为 [('a', 3), ('w', 3), (' ', 2), ('s', 1), ('d', 1), ('f', 1), ('z', 1), ('x', 1), ('c', 1), ('v', 1), ('1', 1), ('2', 1),('q', 1)]
    

    结果是按出现次数顺序排列的列表
    具体就不说了,colletions太强大了,说起来还是很多点的,有机会再细看

  • 相关阅读:
    手机app打开的web,在打开chrome浏览器
    linux环境下安装yaf
    redis在ubuntu下的安装
    验证一个值是否在多维数组中
    20个正则表达式
    nginx+memcached缓存图片
    cocos2dx加载骨骼动画,获取骨骼位置
    listview的pushBackDefaultItem中的item属性被修改问题
    lua保留n位小数方法
    cocos2dx中node的pause函数(lua)
  • 原文地址:https://www.cnblogs.com/congyinew/p/14292828.html
Copyright © 2011-2022 走看看