经过了几天用循环语句写代码,很多小伙伴纷纷表示没有初学的时候那样好用了。看似循环语句可以简单的表述,但是如果完成复杂的结果就需要大量的代码。对于列表的学习想必大家都涉及到了,不过之前学的都是用for循环去处理,今天我们试着避开for循环,看看其他的代码如何来创建列表。
先看下面的代码:
data = [x**2 for x in range(0, 5)] # 此时data = [0, 1, 4, 9, 16]
如果不知道背后的语法规则,那么很难理解为什么可以在列表的方括号中写一个“for”循环?实际上,这种语法称为列表推导式,和lambda表达式类似,都是在代码很短的情况下被使用。
列表推导式或者说列表解析式是一种非常简洁的创建列表的方式。很多时候我们需要创建一个满足特定要求的新列表,不得不用for循环来创建,而用列表推导式来表达只需要一行代码即可。列表推导式另一个优点是相比于for循环更高效,因为列表推导式在执行时调用的是Python的底层C代码,而for循环则是用Python代码来执行。
比如我们需要创建一个包含平方数的列表,用for循环实现方式如下:
squares = [] for i in range(10): squares.append(i**2) print(squares)
如果用列表推导式的话只需一行代码即可实现:
squares = [i**2 for i in range(10)]
列表推导式的语法结构可以分为几部分:
0. “[]”,定义列表的中括号。
1. for循环初步定义列表。
2. 可选:在for循环后面可以使用if语句进行过滤。
3. 在for循环前定于列表的元素表达式,可以是任意的表达式。可以是for循环中的元素本身,也可以是元素进行运算后的结果,也可以是元素组成的元祖或者列表,可以是一个函数,甚至可以是另一个列表解析式(嵌套列表解析式)。
4. 可选:在for循环后面可以再嵌套for循环。
观察上面两种创建列表的代码,我们可以看出实现for循环的代码是4行,而如果我们使用列表推导式,只用轻轻松松的一行代码即可解决,小伙伴们还不快快行动吗?