Python笔记|列表推导式

用列表推导式创建列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。

例如,创建平方值的列表:

>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

注意,这段代码创建(或覆盖)变量 x,该变量在循环结束后仍然存在。下述方法可以无副作用地计算平方列表:

squares = list(map(lambda x: x**2, range(10)))
# 或等价于:
squares = [x**2 for x in range(10)]
# 这种写法更简洁、易读

列表推导式的方括号内包含以下内容:一个表达式,后面为一个 for 子句,然后,是零个或多个 for 或 if 子句。结果是由表达式依据 for 和 if 子句求值计算而得出一个新列表。 举例来说,以下列表推导式将两个列表中不相等的元素组合起来:

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

等价于:

>>> combs = []
>>> for x in [1,2,3]:
...     for y in [3,1,4]:
...         if x != y:
...             combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

注意,上面两段代码中,for 和 if 的顺序相同。
表达式是元组(例如上例的 (x, y))时,必须加上括号:

>>> vec = [-4, -2, 0, 2, 4]
# create a new list with the values doubled
>>> [x*2 for x in vec]
[-8, -4, 0, 4, 8]
>>> # filter the list to exclude negative numbers
>>> [x for x in vec if x >= 0]
[0, 2, 4]
 # apply a function to all the elements
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]
 # call a method on each element
>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
 # create a list of 2-tuples like (number, square)
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
 # the tuple must be parenthesized, otherwise an error is raised
>>> [x, x**2 for x in range(6)]
  File "<stdin>", line 1
    [x, x**2 for x in range(6)]
     ^^^^^^^
SyntaxError: did you forget parentheses around the comprehension target?
 # flatten a list using a listcomp with two 'for'
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

列表推导式可以使用复杂的表达式和嵌套函数:

>>> from math import pi
>>> [str(round(pi, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

相关推荐

  1. Python笔记列表推导

    2024-04-06 03:08:03       18 阅读
  2. Python | List Comprehension |列表推导

    2024-04-06 03:08:03       31 阅读
  3. python课本基础练习——列表推导

    2024-04-06 03:08:03       14 阅读
  4. Python】关于Python列表推导(List Comprehensions)

    2024-04-06 03:08:03       39 阅读
  5. Python基础篇 - 列表推导(List Comprehension)

    2024-04-06 03:08:03       32 阅读
  6. Python在生物信息学中的应用:列表推导

    2024-04-06 03:08:03       26 阅读
  7. Python中,括号内部的for循环(列表推导

    2024-04-06 03:08:03       20 阅读
  8. Python中的列表推导(List Comprehension)

    2024-04-06 03:08:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 03:08:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 03:08:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 03:08:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 03:08:03       20 阅读

热门阅读

  1. 设计模式:原型模式

    2024-04-06 03:08:03       15 阅读
  2. deepspeed学习-多机all_reduce

    2024-04-06 03:08:03       15 阅读
  3. Kubernetes学习笔记6

    2024-04-06 03:08:03       14 阅读
  4. 威胁建模与网络安全测试方法

    2024-04-06 03:08:03       17 阅读
  5. 2024.3.24力扣每日一题——零钱兑换

    2024-04-06 03:08:03       17 阅读
  6. 2024/4/2 HarmonyOS学习笔记一TS数据类型

    2024-04-06 03:08:03       16 阅读
  7. matlab学习(二)(4.2-4.8)

    2024-04-06 03:08:03       11 阅读
  8. 【趣味学算法】11_黑洞数

    2024-04-06 03:08:03       14 阅读