详解Python 中列表推导和 Lambda 的区别

  • Post category:Python

Python 中的列表推导和 Lambda 都是处理迭代对象的方法,它们的区别在于使用场景和代码风格等方面。

列表推导(List Comprehension)

列表推导是一种简洁的语法,可以快速创建列表。列表推导的语法格式为:

[expression for element in iterable if condition]
  • expression: 每个元素要执行的表达式。
  • element: 在可迭代对象中每次迭代时要取得的变量。
  • iterable: 可迭代对象。
  • condition: 过滤条件(可选)。

示例1:创建一个由1-10的偶数构成的列表

even_numbers = [i for i in range(1, 11) if i % 2 == 0]
print(even_numbers)

输出结果:

[2, 4, 6, 8, 10]

示例2:创建一个由字符串中字符转换为ASCII码的列表

string = "Hello, World!"
ascii_list = [ord(char) for char in string]
print(ascii_list)

输出结果:

[72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33]

Lambda 表达式

Lambda 表达式是一种匿名函数,它可以在不定义函数的情况下快速定义一个函数,并返回一个函数对象。Lambda 的语法格式为:

lambda arguments: expression
  • arguments: 传递给函数的参数。
  • expression: 函数执行时要执行的表达式。

示例1:使用 Lambda 表达式将列表中元素的每个字符串都转换为小写字母

strings = ["Hello", "World", "I", "am", "Python"]
lower_strings = list(map(lambda s: s.lower(), strings))
print(lower_strings)

输出结果:

['hello', 'world', 'i', 'am', 'python']

示例2:使用 Lambda 表达式对列表中每个元素进行平方操作

numbers = [1, 2, 3, 4, 5]
squared_list = list(map(lambda x: x**2, numbers))
print(squared_list)

输出结果:

[1, 4, 9, 16, 25]

列表推导与 Lambda 的区别

列表推导用于快速生成新的列表,而 Lambda 表达式用于快速定义匿名函数。列表推导通常会显式地定义一个完整的列表返回,而 Lambda 表达式则通常作为 Python 内置函数 map()filter()reduce() 的参数使用。

此外,使用 Lambda 表达式生成的函数通常只有一行,而使用列表推导生成的列表每行通常也只有一条语句。另外,Lambda 表达式可以在任何需要函数的地方任意使用,在语言框架中特别有用。