最近在工作中为了减少代码的行数而开始使用列表推导式, 结果非常好, 七八行的代码只需要用一行代码就能够写完, 虽然逻辑对于不怎么使用列表推导式的人来说会比较困难, 但是习惯之后也相当容易。 因此强烈推荐大家尽量使用列表推导式。
例子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
总结: 我们使用列表推导式时大多时候是为了减少代码行数, 很少是为了提高性能的。 还有一个目的就是为了使得代码更加简单而又实用, 所以如果有更简洁的写法的话, 那就果断抛弃列表推导式吧!