列表推导式

列表推导式是 Python 中用于创建列表的一种简洁而优雅的方法。通过列表推导式,可以从一个或多个可迭代对象(如列表、元组、字符串、集合等)中生成一个新的列表,同时可以在生成过程中对元素进行过滤和转换。列表推导式不仅能使代码更加简洁,还能提升可读性和执行效率。

基本语法

列表推导式的基本语法如下:

[表达式 for 元素 in 可迭代对象 if 条件]
  • 表达式:它是你希望对每个元素进行的操作或转换。
  • 元素:表示当前循环到的元素。
  • 可迭代对象:你要遍历的对象,比如列表、元组、字符串等。
  • 条件(可选):一个过滤条件,只有满足条件的元素才会被包含在生成的列表中。

基础实例

以下是一些列表推导式示例。

生成平方数列表

实例

squares = [x**2 for x in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

生成偶数列表

实例

evens = [x for x in range(20) if x % 2 == 0]
print(evens)  # 输出: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

生成字符串中每个字符的大写形式:

实例

uppercase_chars = [char.upper() for char in 'hello']
print(uppercase_chars)  # 输出: ['H', 'E', 'L', 'L', 'O']

3. 嵌套循环

列表推导式也可以包含嵌套循环,以处理多维数据结构或生成组合。例如:

实例

cartesian_product = [(x, y) for x in range(3) for y in range(3)]
print(cartesian_product)  # 输出: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

处理矩阵

实例

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flatten = [elem for row in matrix for elem in row]
print(flatten)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

4. 条件过滤

你可以在列表推导式中添加条件,以过滤掉不满足条件的元素。

过滤负数

实例

numbers = [-5, -3, -1, 0, 2, 4, 6]
positive_numbers = [x for x in numbers if x >= 0]
print(positive_numbers)  # 输出: [0, 2, 4, 6]

过滤并转换

实例

words = ['apple', 'banana', 'cherry', 'date']
capitalized_words = [word.capitalize() for word in words if len(word) > 5]
print(capitalized_words)  # 输出: ['Banana', 'Cherry']

5. 复杂表达式

列表推导式不仅限于简单的表达式和条件,你可以在表达式中进行更复杂的操作:

多条件过滤和转换

实例

numbers = range(10)
result = [x**2 if x % 2 == 0 else x**3 for x in numbers if x > 0]
print(result)  # 输出: [1, 4, 27, 16, 125, 36, 343, 64, 729]

使用函数

实例

def square(x):
    return x**2

squares = [square(x) for x in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

6. 注意事项

  • 可读性:虽然列表推导式可以使代码更加简洁,但过于复杂的列表推导式会影响可读性。在这种情况下,使用普通的循环可能更好。
  • 性能:列表推导式在大多数情况下都比普通的循环更高效,但在处理非常大的数据集时,生成器表达式可能是更好的选择,因为它们不会一次性生成整个列表,而是按需生成元素。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
  1. 免费下载或者VIP会员资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
  2. 提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。
  3. 找不到素材资源介绍文章里的示例图片?
    对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
  4. 付款后无法显示下载地址或者无法查看内容?
    如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理
  5. 购买该资源后,可以退款吗?
    源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源

评论(0)

提示:请文明发言