编辑
2024-03-29
Python
00

目录

列表推导式
列表推导式加条件判断语句
生成器表达式

列表推导式

列表推导式是 Python 中的一种构造列表的语法糖。它可以让你用一行代码生成一个列表,而不需要使用循环、条件语句等复杂的语句。列表推导式的基本形式如下:

python
[expression for item in iterable]

这将生成一个新的列表,列表中的每个元素都是通过对 iterable 中的每个 item 应用 expression 得到的。

例如,以下的列表推导式生成了一个包含10个平方数的列表:

python
squares = [x**2 for x in range(10)]

列表推导式加条件判断语句

你也可以在列表推导式中使用 if 语句来过滤元素。例如,以下的列表推导式生成了一个包含10以内所有偶数的列表:

python
evens = [x for x in range(10) if x % 2 == 0]

你还可以在列表推导式中使用多个 for 语句来生成笛卡尔积。例如,以下的列表推导式生成了所有可能的有序对,其中第一个元素来自列表 [1, 2, 3],第二个元素来自列表 [4, 5, 6]

python
pairs = [(x, y) for x in [1, 2, 3] for y in [4, 5, 6]]

请注意,列表推导式可能会生成非常大的列表,如果你的 iterable 包含大量的元素,或者你的 expression 非常复杂,这可能会导致你的程序运行缓慢或者占用大量的内存。在这种情况下,你可能需要考虑使用其他的解决方案,如生成器表达式或者循环。

如果你想在列表推导式中使用条件判断,你可以使用 if 语句。这可以让你在生成新列表时过滤掉一些元素。这是一个基本的形式:

python
[expression for item in iterable if condition]

在这个列表推导式中,condition 是一个可以对 item 进行求值的表达式。只有当 conditionTrue 时,expression 才会被执行并将结果添加到新列表中。

例如,以下的列表推导式生成了一个包含10以内所有偶数的列表:

python
evens = [x for x in range(10) if x % 2 == 0]

在这个例子中,x % 2 == 0 是一个条件,它检查 x 是否是偶数。只有当 x 是偶数时,x 才会被添加到新列表 evens 中。

你也可以在列表推导式中使用多个 if 语句来过滤元素。例如,以下的列表推导式生成了一个包含10以内所有既是偶数又是3的倍数的列表:

python
evens_and_multiples_of_three = [x for x in range(10) if x % 2 == 0 if x % 3 == 0]

在这个例子中,只有当 x 是偶数且是3的倍数时,x 才会被添加到新列表 evens_and_multiples_of_three 中。

生成器表达式是 Python 中的一种构造生成器的语法糖,它的语法和列表推导式非常相似,但是生成器表达式会返回一个生成器,而不是一个列表。生成器是一种特殊类型的迭代器,它不会一次生成所有的元素,而是在每次迭代时生成一个元素。这意味着生成器可以用来表示非常大的序列,而不会消耗大量的内存。

生成器表达式

生成器表达式的基本形式如下:

python
(expression for item in iterable)

例如,以下的生成器表达式生成了一个生成10个平方数的生成器:

python
squares = (x**2 for x in range(10))

你可以像使用其他迭代器一样使用生成器。例如,你可以使用 next 函数来获取生成器的下一个元素,或者使用 for 循环来迭代生成器的所有元素:

python
squares = (x**2 for x in range(10)) print(next(squares)) # 输出: 0 print(next(squares)) # 输出: 1 for square in squares: print(square) # 输出: 4, 9, ..., 81

你也可以在生成器表达式中使用 if 语句来过滤元素,就像在列表推导式中一样:

python
evens = (x for x in range(10) if x % 2 == 0)

在这个例子中,evens 是一个生成器,它会生成10以内的所有偶数。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!