怎么用Python按特定条件查找列表的最小或最大值

2023-06-15 14:03:19 特定 最大值 最小

这篇“怎么用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

相关文章