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, 省去了自己判断类型

Min and Max

时间: 2024-08-28 04:52:59

Min and Max的相关文章

5.7.2.2 min()和max()方法

Math对象还包含许多方法,用于辅助完成简单和复杂的数学计算. 其中,min()和max()方法用于确定一组数值中的最小值和最大值.这两个方法都可以接受任意多个数值参数,如下例子: var max = Math.max(3,54,32,16); alert(max);//54 var min = Math.min(3,54,32,16); alert(min);//3 对于3.54.32和16,Math.max()返回54,而Math.min()返回3.这两个方法经常用于避免多余的循环和在if语

3.python小技巧分享-使用min和max函数去找字典中的最大值和最小值

睡前分享一个小技巧- 使用min和max函数来巧妙的查找一个字典中的最大value和最小value. 比如说,现在有一个字典,字典的key是用户名,value则是这个用户的账户有多少钱. 现在想要找出账户内余额最多的用户,请问如何实现? d1 = {'suhaozhi':12345,'tony':4513,'eric':135,'jolin':13000000} 很简单,只要使用zip函数结合max函数就可以做到了. print max(zip(d1.values(),d1.keys())) #

C++ Find Min and Max element in a BST

对于一个二叉搜索树, 要想找到这棵树的最小元素值, 我们只需要从树根开始, 沿着left 孩子指针一直走, 知道遇到NULL(即走到了叶子), 那么这个叶子节点就存储了这棵二叉搜索树的最小元素. 同理, 从根节点开始, 沿着right 孩子指针, 最终找到的是最大关键字的节点. 也就是说寻找BST最小关键字的元素和最大关键字的元素的代码是对称的.伪代码如下: TREE_MINIMUM(x) while x.left != NULL x= x.left return  x 寻找最大关键字元素的伪代

Hive分析窗体函数之SUM,AVG,MIN和MAX

Hive中提供了非常多的分析函数,用于完毕负责的统计分析. 本文先介绍SUM.AVG.MIN.MAX这四个函数. 环境信息: Hive版本号为apache-hive-0.14.0-bin Hadoop版本号为hadoop-2.6.0 Tez版本号为tez-0.7.0 构造数据: P088888888888,2016-02-10,1 P088888888888,2016-02-11,3 P088888888888,2016-02-12,1 P088888888888,2016-02-13,9 P0

numpy中min和max的用法

min和max用法差不多,只写min 的 min返回数组中的最小值 1.若是数据集.min()里面没有写参数,则选择所有数据里面的最小值,因为给的数组可能有多维,但是没指定参数的话,就选一个最小值 2.min(0),选择第一维中的 所有 最小值,比如说是一个数组[1,2],[3,4],最终结果是[1,2]. [1,2]和[3,4]这两个是第一维,就是1和3比较,2和4比较 3.min(1),选择第二维中的最小值,同样是上面的例子,1和2比较,3和4比较,最终结果[1,3]

Visual C++中min()和max()函数的使用

标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max().通常用它可以计算某个值对的最小值和最大值. 可 惜在 Visual C++ 无法使用它们,因为没有定义这些函数模板.原因是名字min和max与<windows.h>中传统的min/max宏定义有冲突.为了解决 这个问题,Visual C++ 定义了另外两个功能相同的模板:_cpp_min() 和 _cpp_max().我们可以用它们来代替std::min() 和 std::max()

mysql中min和max查询优化

mysql max() 函数的需扫描where条件过滤后的所有行: 在测试环境中重现: 测试版本:Server version:         5.1.58-log MySQL Community Server (GPL) testtable表中的索引 mysql> show index from testtable;+-----------+------------+------------+--------------+-------------+-----------+---------

java8 stream接口 终端操作 min,max,findFirst,findAny

// 方法一 https://www.cnblogs.com/secbro/p/11685681.html Integer id = list.stream().map(Foo::getId).findAny().orElse(null); // 方法二 Integer id = list.stream().findAny().map(Foo::getId).orElse(-1); 如果删除方法一,只执行方法二,则不会出现异常.为什么呢? 具体分析: 首先方法一种,list.stream().m

[perl]min与max的实现

1 sub min { 2 local $min = shift; 3 for (@_) { 4 $min = $_ if $_ < $min; 5 } 6 7 return $min; 8 } 9 10 sub max { 11 local $max = shift; 12 for (@_) { 13 $max = $_ if $_ > $min; 14 } 15 16 return $max; 17 }