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

来源:互联网 发布:西安it 编辑:程序博客网 时间:2024/06/05 19:53

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

例子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
总结: 我们使用列表推导式时大多时候是为了减少代码行数, 很少是为了提高性能的。 还有一个目的就是为了使得代码更加简单而又实用, 所以如果有更简洁的写法的话, 那就果断抛弃列表推导式吧!



0 0
原创粉丝点击