Python 中的列表推导式详解 python列表讲解
·
在 Python 中,列表推导式是一种简洁而富有表现力的方式,通过以紧凑的语法指定元素和条件来创建数据结构,如列表、字典和集合,通常使用单行代码,而不是使用传统的循环和附加操作。
在 Python 中,主要有三种类型的推导式: 列表推导式词典推导 集合推导式列表推导式:列表推导式提供了一种简洁的方法来创建列表,方法是遍历 'iterable' 对象并将表达式应用于每个元素。基本语法如下:[item for item in iterable]
词典推导式:与列表推导式类似,字典推导式允许您创建词典。基本语法是:{key_expression: value_expression for item in iterable}
集合推导式:集合推导式使用类似的语法来列出推导式,但它们使用大括号,而不是方括号。集合推导式会自动从结果集中删除重复的元素。基本语法是:{expression for item in iterable}
这些推导式中的每一个都会根据指定的表达式和条件生成不同类型的集合(列表、字典或集合)。让我们详细看看这些。
列表推导式
列表推导式的基本语法是:[expression for item in iterable]
- expression:是要为每个元素计算的操作或值。
- item: 是表示可迭代对象中每个元素的变量。
- iterable:任何 Python 可迭代对象,如列表、元组、字符串等。
# Code using loop to create a list of first 10 even numbers
even_nums = []
for x in range(2, 21, 2):
even_nums.append(x)
print(even_nums)
# List comprehension equivalent for creating a list of first 10 even numbers
even_nums = [x for x in range(2, 21, 2)]
print(even_nums)
创建一个介于 2 和 20 之间的偶数列表
# Code using loop to create squares of a list of numbers (Using even_nums list)
squares = []
for x in even_nums:
squares.append(x**2)
print(squares)
# List Comprehension equivalent for calculating squares
squares = [x**2 for x in even_nums]
print(squares)
带有 if 条件的列表推导式的语法:[expression for item in iterable if condition]
- expression:是要为每个元素计算的操作或值。
- item: 是表示可迭代对象中每个元素的变量。
- iterable:任何 Python 可迭代对象,如列表、元组、字符串等。
- condition:这是一个可选表达式,可用于筛选项目。
# Code using loop to generate list of numbers divisible by 3
num_lst = list(range(1, 31))
div_by_3 = []
for x in num_lst:
if x%3 == 0:
div_by_3.append(x)
print(div_by_3)
# List Comprehension equivalent to generating list of numbers divisible by 3
div_by_3 = [x for x in num_lst if x%3==0]
print(div_by_3)
带有 if else 条件的列表推导式的语法:[expression if condition else alt_value for item in iterable]
哪里:
- expression:是要为每个元素计算的操作或值。
- item: 是表示可迭代对象中每个元素的变量。
- iterable:任何 Python 可迭代对象,如列表、元组、字符串等。
- condition:这是一个可选表达式,可用于在满足条件时提供值。
- else:这是一个可选表达式,可用于在不满足条件时提供值。
# Code using loop to generate list of dictionaries odd & even numbers
num_lst = list(range(1, 14))
odd_even = []
for x in num_lst:
if x%2 == 0:
odd_even.append({x:'even'})
else:
odd_even.append({x:'odd'})
print(odd_even)
# Comprehension equivalent to generating list of dictionaries of odd & even numbers
odd_even = [{x:'even'} if x%2==0 else {x:'odd'} for x in num_lst]
print(odd_even)
虽然列表推导是最常见的,但字典和集合推导并无太大区别,可以/应该以相同的效果和逻辑来实现,以充分利用这些独特的数据结构。
推导式对于以简洁易读的方式转换数据、筛选数据或创建数据组合非常有用。与使用循环相比,它们还可以提高代码的性能。虽然它们可以使代码更简洁,但过于复杂的理解有时会降低可读性,因此不应过度使用或嵌套得太深。在 Python 代码中使用推导式时,必须在可读性和简洁性之间保持平衡。