分享

Python3列表解析之任意迭代、表达式、条件和嵌套循环等特性详解

 hdzgx 2019-12-26

概述

列表解析即利用现有的可迭代对象创建新的列表的Python语法,其过程完全可以用for循环复刻,但其解析效率比for循环快一些,缺点也很明显,即不适合用于大数据迭代对象的解析,因为会占用大量内存,导致MemoryError。当然列表解析让人爱不释手的另一个原因就是简洁。

列表解析基础示例

解析列表

  1. L = [1, 2, 3, 4, 5]
  2. LL = [x ** 2 for x in L]
  3. [print(x) for x in LL]
  4. 复制代码

示例结果:

  1. 1
  2. 4
  3. 9
  4. 16
  5. 25
  6. 复制代码

示例中我们完成了对原列表元素每个值进行平方的操作,每个元素的平方结果构成了新的列表

解析字典

  1. D = {
  2. 'one': 1,
  3. 'two': 2,
  4. 'three': 3,
  5. 'four': 4,
  6. 'five': 5
  7. }
  8. L = [D[key] ** 2 for key in D]
  9. [print(x) for x in L]
  10. 复制代码
  1. 1
  2. 4
  3. 9
  4. 16
  5. 25
  6. 复制代码

示例中我们利用列表解析获取字典的键值并对每个键值进行平方的操作,而每个键值的平方结果构成了新的列表

解析字符串

  1. S = '12345'
  2. L = [int(s) ** 2 for s in S]
  3. [print(x) for x in L]
  4. 复制代码

示例结果

  1. 1
  2. 4
  3. 9
  4. 16
  5. 25
  6. 复制代码

示例中我们利用列表解析获取字符串中单个字符串并且转为整型并进行平方和的操作,而每个平方后的结果构成了新的列表

解析文件

  1. with open('ex.txt') as f:
  2. lines = f.readlines()
  3. LINES = [line.strip().title() for line in lines]
  4. [print(line) for line in LINES]
  5. 复制代码
  1. i like python.
  2. python makes me happy.
  3. without python, without live.
  4. 复制代码

示例中我们甚至可以利用列表解析读取文件中的数据

表达式

列表解析中的表达式(expr)可以是简单的或者复杂的表达式,甚至是函数,若在前面的例子中我们利用列表解析逐一打印了列表中的数据。

  1. def is_even(x):
  2. if x >= 0 and x % 2:
  3. return x, True
  4. else:
  5. return x, False
  6. L = [1, 2, 3, 4, 5]
  7. L_EVEN = [is_even(x) for x in L]
  8. print(L_EVEN)
  9. 复制代码

示例结果

  1. [(1, True), (2, False), (3, True), (4, False), (5, True)]
  2. 复制代码

条件列表解析

在列表解析中我们也可以直接加入条件限制解析出的元素

  1. L = [1, 2, 3, 4, 5]
  2. L_EVEN = [x for x in L if x >= 0 and x % 2]
  3. [print(EVEN) for EVEN in L_EVEN]
  4. 复制代码

示例结果:

  1. 1
  2. 3
  3. 5
  4. 复制代码

多值列表解析

列表解析也支持对迭代对象的多值解析

  1. D = {
  2. 'one': 1,
  3. 'two': 2,
  4. 'three': 3,
  5. 'four': 4,
  6. 'five': 5
  7. }
  8. L = ['{} = {}'.format(key, value) for (key, value) in D.items()]
  9. [print(x) for x in L]
  10. 复制代码

示例结果

  1. one = 1
  2. two = 2
  3. three = 3
  4. four = 4
  5. five = 5
  6. 复制代码

嵌套循环

列表解析可以进行嵌套循环,原理和for中的嵌套循环一致

  1. L1 = ['a', 'b', 'c']
  2. L2 = ['1', '2', '3']
  3. L = [x+y for x in L1 for y in L2]
  4. [print(x) for x in L]
  5. 复制代码

示例结果

  1. a1
  2. a2
  3. a3
  4. b1
  5. b2
  6. b3
  7. c1
  8. c2
  9. c3
  10. 复制代码

转载于:https:///post/5ce2acc66fb9a07eed34d211

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多