『Python』序列学习总结之五 ——列表推导式的一些应用

    最近在工作中为了减少代码的行数而开始使用列表推导式, 结果非常好, 七八行的代码只需要用一行代码就能够写完, 虽然逻辑对于不怎么使用列表推导式的人来说会比较困难, 但是习惯之后也相当容易。 因此强烈推荐大家尽量使用列表推导式。

例子1:

numLists  = []
def test():
    for i in xrange(147):
        numList = []
        for j in xrange(147):
            if i == j:
                numList.append(1)
            else:
                numList.append(0)
        numLists.append(numList)
test()
 在这个例子中,总共的行数是11行, 那么如果用列表推导式应该怎么写呢? 

[[1 if i == j else 0 for i in range(147)] for j in range(147)]
列表推导式生成的结果跟 test 函数生成的结果是一模一样的,但是行数却要少得多, 同时在进行性能测试时发现, 列表推导式的运行时间只有 test 函数的一半

因此无论是为了减少代码行数还是提高性能, 都应该使用列表推导式

当然了, 列表推导式不是只有这样的应用, 它还可以用来生成一个元素符合你想要的列表, 好处在于除了不用特地写个函数或者写个for循环之外, 还在于它的简单而又实用

例子2:

[(0, 1) for i in range(10)]

例子2可以生成一个长度为10, 元素分别为 (0, 1) 的列表。 用处在于, 你可以用来生成一个线性规划中各个变量的上下限的变量。 而如果使用for循环来写呢?

例子3:

mylist = []
for i in range(10):
    mylist.append((0, 1))
对比例子2和例子3,虽然例子3的行数只有3行并不算多, 但是明显例子2比例子3更加简单而且实用

另外例子2也有一个更简单的写法:

[(0, 1)]*10
总结: 我们使用列表推导式时大多时候是为了减少代码行数, 很少是为了提高性能的。 还有一个目的就是为了使得代码更加简单而又实用, 所以如果有更简洁的写法的话, 那就果断抛弃列表推导式吧!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值