title: 【python基础之列表生成式】---列表生成式
date: 2023-12-15 19:37:06
updated: 2023-12-15 19:37:00
description: 【python基础之列表生成式】---列表生成式
cover:
https://zhuanlan.zhihu.com/p/624339792
前言
由于之前也简述过相关列表生成式的一些内容,今天就单独将这个内容拿出来也当学习也当分享。
Python 中的列表生成式(List Comprehension)是一种简洁、高效的方式来生成新的列表。它可以在一个语句中创建一个新的列表,并且允许我们通过简洁的语法来筛选、转换或操作已有的列表。
列表生成式的基本语法
列表生成式的语法基本结构为:
new_list = [expression for item in iterable if condition]
其中:
expression
:是一个表达式,用于对item
进行操作,生成新的元素,这是列表生成式必须要有的部分。item
:是在iterable
中的元素,可以是列表、元组、字符串、集合、字典等可迭代对象。iterable
:是一个可迭代对象,可以是列表、元组、字符串、集合、字典等。condition
:是一个可选的条件,用于筛选item
,只有满足条件的item
才会被加入到新列表中。
基本示例
让我们来看一个基本的示例。假设我们有一个列表,需要生成一个新的列表,其中每个元素是原列表中的元素的平方:
numbers = [1, 2, 3, 4, 5]
squares = [num ** 2 for num in numbers]
print(squares) # 输出 [1, 4, 9, 16, 25]
在上面的代码中,我们使用列表生成式生成了一个新的列表squares
,其中每个元素是原列表numbers
中的元素的平方。列表生成式的语法为[num ** 2 for num in numbers]
,其中表达式num ** 2
对原列表中的每个元素进行了操作,生成了一个新的元素。
带有条件的列表生成式
列表生成式还可以包含条件表达式,用于筛选原列表中的元素。例如,我们可以使用以下列表生成式,生成一个新的列表,其中只包含原列表中的偶数:
numbers = [1, 2, 3, 4, 5]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers) # 输出 [2, 4]
在上面的代码中,我们使用带有条件的列表生成式[num for num in numbers if num % 2 == 0]
,生成了一个新的列表even_numbers
,其中只包含原列表numbers
中的偶数。条件表达式if num % 2 == 0
用于筛选原列表中的元素,只有符合条件的元素才会被加入到新列表中。
嵌套列表生成式
嵌套列表生成式指的是在一个列表生成式中使用多个循环语句,来生成嵌套的列表。
其语法形式为:
[[expression] for item in iterable1 [for item2 in iterable2] ...]
其中,iterable1
为最外层循环的可迭代对象,iterable2
为内层循环的可迭代对象。expression
是生成元素的表达式,可以使用 item
和 item2
以及其他变量。
下面以一个例子来说明:
matrix = [[i+j for j in range(3)] for i in range(4)]
print(matrix)
输出结果为:
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]
在这个例子中,我们使用了两个循环语句,外层循环是 for i in range(4)
,内层循环是 for j in range(3)
。在内层循环中,我们使用了 i
和 j
,并且计算了它们的和作为生成的元素,即 i+j
。最终,通过列表生成式生成了一个 4 行 3 列的嵌套列表。
需要注意的是,内层循环的语句可以出现在外层循环的语句之前,但是生成的列表的结构是相同的。
使用函数
列表生成式不仅可以使用简单的表达式,还可以使用函数来对元素进行操作。通过在列表生成式中调用函数,可以对元素进行自定义的操作和处理。
例如,假设有一个字符串列表,我们想要对其中的每个字符串都进行反转操作,并生成一个新的列表。可以使用以下代码实现:
words = ['hello', 'world', 'python']
reverse_words = [word[::-1] for word in words]
print(reverse_words)
这里使用了字符串的切片操作来反转字符串。输出结果为:['olleh', 'dlrow', 'nohtyp']
。
除了使用字符串的切片操作,我们还可以使用内置函数 reversed()
来对字符串进行反转操作。例如:
def reverse_string(string):
return ''.join(reversed(string))
words = ['hello', 'world', 'python']
reverse_words = [reverse_string(word) for word in words]
print(reverse_words)
这里定义了一个 reverse_string()
函数来对字符串进行反转操作。使用 join()
函数将反转后的字符串转换为字符串类型。输出结果和之前的一样:['olleh', 'dlrow', 'nohtyp']
。
使用函数可以让列表生成式更加灵活和强大,可以根据实际需求对元素进行自定义的操作和处理。
标签:生成式,python,元素,列表,num,numbers,words From: https://www.cnblogs.com/queryH/p/17904089.html