专业编程基础技术教程

网站首页 > 基础教程 正文

Python-高阶函数应用解析(python高级算法)

ccvgpt 2024-11-15 16:40:37 基础教程 5 ℃

1. map(function, iterable, ...)

详细讲解

  • map()函数接受一个函数和一个迭代器作为参数。它将传入的函数应用于迭代器里的每个元素,然后返回一个新的迭代器,用于按顺序存储函数调用的结果。
  • 该函数的一个常见用途是对数据进行转换和标准化处理。

应用案例

Python-高阶函数应用解析(python高级算法)

  1. 平方数列表:将数字列表中的每个元素平方。
  2. 字符串长度:计算一组字符串中每个字符串的长度。
# 应用案例1: 数字列表的每个元素平方
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
# 输出: [1, 4, 9, 16]

# 应用案例2: 计算字符串长度
words = ["hello", "world", "python"]
lengths = list(map(len, words))
# 输出: [5, 5, 6]

2. filter(function, iterable)

详细讲解

  • filter()函数用于从一个序列中筛选出符合条件的元素,返回一个迭代器。该迭代器惰性获取数据,仅在需要时才处理元素。
  • 它通常用于数据清洗,比如从一组数据中移除不需要的值。

应用案例

  1. 筛选偶数:从列表中选择偶数。
  2. 移除空字符串:从字符串列表中移除所有的空字符串。
# 应用案例1: 筛选偶数
numbers = range(1, 11)
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
# 输出: [2, 4, 6, 8, 10]

# 应用案例2: 移除空字符串
strings = ["python", "", "coding", ""]
non_empty_strings = list(filter(None, strings))
当filter()函数的第一个参数是None时,
Python的行为是保留那些在布尔上下文
中被评估为True的元素,
而不是字面上的"none"字符串
或None值本身。
这意味着,
如果迭代器中的元素在逻辑上被视为True,
这些元素就会被filter()保留;
否则(即元素被视为False,
比如0、False、""、None、空列表等),
这些元素就会被过滤掉。
# 输出: ['python', 'coding']

3. reduce(function, sequence[, initial]) (需要从functools导入)

详细讲解

  • reduce()函数将一个二元操作函数应用到所有序列的元素上,从而将序列减少为单一的值。
  • 它在进行累积操作时非常有用,比如计算总和或乘积。

应用案例

  1. 计算总和:计算数字列表的总和。
  2. 字符串连接:将字符串列表连接成一个长字符串。
from functools import reduce

# 应用案例1: 计算总和
numbers = [1, 2, 3, 4]
total_sum = reduce(lambda x, y: x + y, numbers)
# 输出: 10

# 应用案例2: 字符串连接
words = ["Python", "is", "awesome"]
sentence = reduce(lambda x, y: x + " " + y, words)
# 输出: 'Python is awesome'

4. sorted(iterable, *, key=None, reverse=False)

详细讲解

  • sorted()函数返回一个根据指定规则排序的新列表,不修改原始数据结构。
  • 通过key参数可以自定义排序规则,reverse参数控制升序或降序排序。

应用案例

  1. 按长度排序:按字符串长度对字符串列表进行排序。
  2. 按字典值排序:根据字典中的值对字典进行排序。
# 应用案例1: 按字符串长度排序
words = ["Python", "is", "a", "programming", "language"]
sorted_by_length = sorted(words, key=len)
# 输出: ['a', 'is', 'Python', 'language', 'programming']

# 应用案例2: 按字典值排序
data = [{'name': 'John', 'age': 45}, {'name': 'Diana', 'age': 35}]
sorted_by_age = sorted(data, key=lambda x: x['age'])
# 输出: [{'name': 'Diana', 'age': 35}, {'name': 'John', 'age': 45}]

5. all(iterable)和any(iterable)

详细讲解

  • all()和any()函数用于对可迭代对象进行布尔测试。all()返回True如果迭代器中的所有元素都为True(或迭代器为空)。any()返回True如果迭代器中有任何元素为True。
  • 它们常用于快速检查序列中的元素是否满足某个条件。

应用案例

  1. 检查是否所有元素为True:检查数字列表中的所有元素是否大于0。
  2. 检查是否有元素为True:检查数字列表中是否存在正数。
# 应用案例1: 检查所有元素是否大于0
numbers = [1, 2, 3, 4]
check_all_positive = all(x > 0 for x in numbers)
# 输出: True

# 应用案例2: 检查是否存在正数
numbers = [0, -1, -2, 3]
check_any_positive = any(x > 0 for x in numbers)
# 输出: True

6. enumerate(iterable, start=0)

详细讲解

  • enumerate()函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,通常用在for循环中。
  • start参数用于指定索引起始值。

应用案例

  1. 遍历列表:遍历列表,同时获取元素索引和值。
  2. 在字典中使用:在遍历字典时,获取键值对的顺序和键值对本身。
# 应用案例1: 遍历列表,获取索引和值
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits, start=1):
    print(f"Index {index}: {fruit}")
# 输出: 
# Index 1: apple
# Index 2: banana
# Index 3: cherry

# 应用案例2: 在字典中使用enumerate
data = {'a': 1, 'b': 2, 'c': 3}
for index, (key, value) in enumerate(data.items(), start=1):
    print(f"Item {index}: {key}={value}")
# 输出:
# Item 1: a=1
# Item 2: b=2
# Item 3: c=3

最近发表
标签列表