这篇“怎么用Python按特定条件查找列表的最小或最大值”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Python按特定条件查找列表的最小或最大值”文章吧。
1. 引言
Python中的
min和
max函数允许我们找到列表(或类似可迭代数据结构)的最小值/最大值,但是我们可以对其扩展,即根据特定应用条件来进行相应的查找。
2. 基础用法
我们知道,函数
Min和
Max的功能和其名字意义一样,用来返回列表中的最小和最大值,我们来看个简单的例子。 这里假设我们有以下列表:
list1 = [3,6,5,2,9,7]
此时我们可以使用
min(list1)函数来获得列表
list1里最小的元素,同时我们也可以使用
max(list1)函数来获得列表
list1里最大的元素。
minimum = min(lis) # 2 maximum = max(lis) # 9
3. 加入特定条件
但是,如果我们想使用某个条件找到列表的最小/最大值,该怎么办?我们可以使用参数
key来实现。我们观察如下列表:
lis = ["apple", "orange", "pear", "pineapple", "banana"]
这里上述列表为字符串列表,如果我们希望查找包含字符数目最少/多的元素。我们可以这样定义查找条件函数:
def condition(string): return len(string)
上述条件函数接受列表中的元素,并返回我们希望设定的条件来查找最小或最大值,我们将上述条件作为参数传递给函数
min和
max,如下:
minimum = min(lis, key=condition) # pear maximum = max(lis, key=condition) # pineapple
这里值得一提的是,关键字
key需要传入函数。
4. 使用lambda表达式
更进一步,我们可以将上述条件函数改写成lambda表达式,这样就可以使用简洁的代码来实现功能强大的作用。如下:
def condition1(string): return len(string) condition1 = lambda string: len(string)
可以看出,二者功能一摸一样,但lambda表达式的写法更加简洁。 此时根据字符串长度求列表最小最大元素可以改写成如下形式:
minimum = min(lis, key=lambda s:len(s)) # pear maximum = max(lis, key=lambda s:len(s)) # pineapple
5. 举一反三
假设我们希望通过统计字母
a的数量来查找字符串列表的最小/最大元素,我们可以这样实现:
lis = ["apple", "orange", "pear", "pineapple", "banana"] min(lis, key=lambda s:s.count("a")) # apple max(lis, key=lambda s:s.count("a")) # banana
更近一步,通过元音的数量
(a、e、i、o、u)来确定字符串列表的最小/最大元素,实现如下:
lis = ["apple", "orange", "pear", "pineapple", "banana"] min(lis, key=lambda s:sum([c in "aeiou" for c in s])) # apple max(lis, key=lambda s:sum([c in "aeiou" for c in s])) # pineapple
根据整数列表的最后一个数字求其最小值/最大值:
lis = [4,5,19,101,302] min(lis, key=lambda n:str(n)[-1]) # 101 max(lis, key=lambda n:str(n)[-1]) # 19