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

概述

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

列表解析基础示例

解析列表
L = [1, 2, 3, 4, 5]
LL = [x ** 2 for x in L]
[print(x) for x in LL]

示例结果:

1
4
9
16
25

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

解析字典
D = {
    'one': 1,
    'two': 2,
    'three': 3,
    'four': 4,
    'five': 5
}
L = [D[key] ** 2 for key in D]
[print(x) for x in L]
1
4
9
16
25

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

解析字符串
S = '12345'
L = [int(s) ** 2 for s in S]
[print(x) for x in L]

示例结果

1
4
9
16
25

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

解析文件
with open('ex.txt') as f:
    lines = f.readlines()
    LINES = [line.strip().title() for line in lines]
    [print(line) for line in LINES]
i like python.
python makes me happy.
without python, without live.

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

表达式

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

def is_even(x):
    if x >= 0 and x % 2:
        return x, True
    else:
        return x, False


L = [1, 2, 3, 4, 5]
L_EVEN = [is_even(x) for x in L]
print(L_EVEN)

示例结果

[(1, True), (2, False), (3, True), (4, False), (5, True)]

条件列表解析

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

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

示例结果:

1
3
5

多值列表解析

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


D = {
    'one': 1,
    'two': 2,
    'three': 3,
    'four': 4,
    'five': 5
}
L = ['{} = {}'.format(key, value) for (key, value) in D.items()]
[print(x) for x in L]

示例结果

one = 1
two = 2
three = 3
four = 4
five = 5

嵌套循环

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

L1 = ['a', 'b', 'c']
L2 = ['1', '2', '3']
L = [x+y for x in L1 for y in L2]
[print(x) for x in L]

示例结果

a1
a2
a3
b1
b2
b3
c1
c2
c3
  • 0
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值