Understanding map, filter, and zip in Python Understanding map, filter, and zip in Python

2025-06-04

理解 Python 中的 map、filter 和 zip

理解 Python 中的 map、filter 和 zip

理解 Python 中的 map、filter 和 zip

本文的目的是了解 Python 内置函数 map()、filter() 和 zip() 的工作原理,以便您更高效地使用 Python 处理数据!

我将介绍这些功能的工作原理,并提供带有和不带有这些功能的用例进行比较。

理解这些函数的工作原理很重要,但读完本文后,你会发现一个更好的方法!它叫做“理解式” ,我在“Python 理解式入门”一文中对此进行了介绍。

地图

Python 的 map() 函数用于将函数应用于指定可迭代对象的所有元素并返回一个 map 对象。

map()将采用 2 个必需的位置参数。1.) 针对可迭代对象运行的函数。2.) 可迭代对象(即列表)。

map(func, [...])
Enter fullscreen mode Exit fullscreen mode

预期输出将是map object具有记忆位置的。

让我们举个例子,将函数应用于square()一个整数列表。这里的目标是从原始numbers列表中获取一个平方数列表。

def square(number):
    return number*number
Enter fullscreen mode Exit fullscreen mode
numbers = [1,2,3,4,5]
Enter fullscreen mode Exit fullscreen mode

没有 map()

def square(number):
    return number*number

numbers = [1,2,3,4,5]
squared_numbers = []

for number in numbers:
    squared = square(number)
    squared_numbers.append(squared)
Enter fullscreen mode Exit fullscreen mode

使用 map()

def square(number):
    return number*number

numbers = [1,2,3,4,5]
squared_numbers = map(square, numbers)
Enter fullscreen mode Exit fullscreen mode

我们的观察结果:

  • 使用时map()我们不需要创建一个在 for 循环中附加的空列表。
  • 我们不需要使用square()括号作为函数参数,因为map()会为我们调用函数,我们只需传递函数对象。
  • map()square()将针对中的每个项目运行numbers

筛选

Python 的 filter() 函数检查可迭代对象中每个元素的条件,并返回仅包含符合给定条件的元素的过滤数据结构。

filter()将采用 2 个必需的位置参数。1.) 针对可迭代对象运行的函数。2.) 可迭代对象(即列表)。

filter(func, [...])
Enter fullscreen mode Exit fullscreen mode

传递给的函数filter()必须返回布尔值(TrueFalse

预期输出将是filter object具有记忆位置的。

让我们举个例子,将函数应用于even()一个整数列表。这里的目标是获取一个只包含偶数的列表。

def even(number):
    if (number  % 2) == 0:
        return True
    return False
Enter fullscreen mode Exit fullscreen mode
numbers = [1,2,3,4,5]
Enter fullscreen mode Exit fullscreen mode

不使用过滤器()

def even(number):
    if (number % 2) == 0:
        return True
    return False

numbers = [1,2,3,4,5]

even_numbers = []
for number in numbers:
    if even(number):
        even_numbers.append(number)
Enter fullscreen mode Exit fullscreen mode

使用 filter()

def even(number):
    if (number % 2) == 0:
        return True
    return False

numbers = [1,2,3,4,5]
even_numbers = filter(even, numbers)
Enter fullscreen mode Exit fullscreen mode

我们的观察结果:

  • 使用时filter()我们不需要创建一个在 for 循环中附加的空列表。
  • 我们不需要使用even()括号作为函数参数,因为filter()会为我们调用函数,我们只需传递函数对象。
  • filter()even()将对中的每个项目运行numbers并删除返回的所有元素False

拉链

Python 的 zip() 函数将具有匹配索引的两个列表的元素组合成一个可交互的元组。

zip()将采用未定义数量的参数,其中每个参数都是可迭代的 zip。

zip([...], [...], [...], ...)
Enter fullscreen mode Exit fullscreen mode

它的预期输出将是zip object包含每个可迭代的相同索引元素的元组以及内存位置。

让我们将上面的两个例子结合起来,创建一个偶数列表,其中包含它们各自的平方结果。

def even(number):
    if (number % 2) == 0:
        return  True
    return  False

def square(number):
    return number*number

numbers = [1,2,3,4,5]
even_numbers = filter(even, numbers)
even_numbers_squared = map(square, even_numbers)
Enter fullscreen mode Exit fullscreen mode

不使用 zip()

...
even_numbers = [2,4]
even_numbers_squared = [4, 8]
combined = []
even_numbers_index = 0
for number  in even_numbers:
    squared = even_numbers_squared[even_numbers_index]
    squared_tuple = (number, squared)
    combined.append(squared_tuple)
Enter fullscreen mode Exit fullscreen mode

使用 zip()

...
even_numbers = [2,4]
even_numbers_squared = [4, 8]
zipped_result = zip(even_numbers, even_numbers_squared)
Enter fullscreen mode Exit fullscreen mode

我们的观察结果:

  • 使用zip()我们可以将来自多个列表的值与匹配的索引组合起来,而无需创建缓冲区列表或使用 for 循环进行迭代。

结论

因此希望通过本文你能基本了解这些函数的工作原理、它们为什么有用以及它们如何帮助你编写更高效、更易读的 Python 代码!

理解这些函数的工作原理很重要,但读完本文后,你会发现一个更好的方法!它叫做“理解式” ,我在“Python 理解式入门”一文中对此进行了介绍。

文章来源:https://dev.to/codespent/understanding-map-filter-and-zip-in-python-3ifn
PREV
NodeJS 中的 Web Socket 入门
NEXT
JavaScript、异步编程和 Promises