zoukankan      html  css  js  c++  java
  • Min and Max

    Min and Max

    需要处理不同数据类型; 另外*args, 表示的是位置参数, *kwargs表示的是key参数, args的类型为tuple类型, 参数为min(3, 2)时, args为(3, 2), 参数为min([3, 2])时, args为([3, 2], );

    列表解析为[i for i in range(0, 1)], 而(i for i in range(0, 1))为generator, 通过.next()属性获取下一个元素, 它不像列表解析一次性生成所有元素, 每次调用next生成一个元素;

     1 def min(*args, **kwargs):
     2     key = kwargs.get("key", None)
     3 
     4     sort_source = args if len(args) > 1 else args[0] #tuple comprehension
     5 
     6     if isinstance(sort_source, set):
     7         rel = sort_source.pop()
     8     elif type(sort_source) == type((i for i in range(0, 1))):
     9         rel = sort_source.next()
    10     else:
    11         rel = sort_source[0]
    12 
    13     if key != None:
    14         for each in sort_source:
    15             if key(each) < key(rel):
    16                 rel = each
    17     else:
    18         for each in sort_source:
    19             if  each < rel:
    20                 rel = each
    21 
    22     return rel

    观摩Cjkjvfnby的代码

     1 def get_first_from_sorted(args, key, reverse):
     2     if len(args) == 1:
     3         args = iter(args[0])
     4     return sorted(args, key=key, reverse=reverse)[0]
     5  
     6  
     7 def min(*args, key=None):
     8     return get_first_from_sorted(args, key, False)
     9  
    10  
    11 def max(*args, key=None):
    12     return get_first_from_sorted(args, key, True)

    无他, 在len(arg) == 1的情况, 仍然需要提取出实际的对象, 如([1, 2], )中的[1, 2]; 高明的地方在于使用了sorted, 省去了自己判断类型

  • 相关阅读:
    Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解
    小猴子下落(二叉树,思维)
    Curious Robin Hood(树状数组+线段树)
    表达式求值(后缀表达式求值)
    郁闷的C小加(一)(后缀表达式)
    最小公倍数(大数)
    修路方案(次小生成树)
    Cipher(置换群)
    Cow Sorting(置换群)
    Necklace of Beads(polya计数)
  • 原文地址:https://www.cnblogs.com/hzhesi/p/3891675.html
Copyright © 2011-2022 走看看