列表解析
本文旨在说明列表解析的用法
Python是一门简单高效的语言,因此代码也可以变得简单高效,主要目的的利于阅读,方便书写。因此引入了许多语法糖。列表解析就是个例子。
传统方式的for循环:
arr=[]
for i in range(10):
arr.append(i)
# 循环添加0-9
这种循环想必大家全都信手拈来,但是Python把这种代码简化了一下,使得更加方便,一行即可搞定:
arr=[i for i in range(10)]
以上的代码与最上面的传统方式有同等的效果,都是[0,1,2,3,4,5,6,7,8,9](已经过测试)
本文不分析源码实现(因为本人也不会啊),只负责教会各位怎么看以及怎么写==。
接下来,让我们分析一下上面出现的列表解析:arr=[i for i in range(10)]
- arr显然是一个列表
- 列表中有一个for循环:for i in range(10),这里就是执行循环的地方
- 前面有一个i,和for循环中的变量一样,因此这就是循环体
总结:在列表解析中,需要添加的变量写在前面,循环写在后边。
练习:用列表解析生成一个二维数组如:[[],[],[],[],[]]
因为我们不可能只会单纯的循环,可能在循环中再加入循环,或者加入条件,因此列表解析需要更高级一点的用法了。
示例:
#条件判断
arr=[i for i in range(10) if i is 5]#--> [5]
#循环嵌套:
arr=[j for i in range(2) for j in range(i)]#--> [0, 0, 1, 0, 1, 2]
接下来,分析一下结构:
arr = [ i for i in range(10) if i is 5 ]
(列表名)= [(代表列表元素的变量) (最外层的循环) (内部条件判断)]
arr = [ j for i in range(2) for j in range(i)]
(列表名)= [(代表列表元素的变量) (最外层的循环) (内部循环) ]
大家看懂了吗?
没看懂?
那总结一下吧:
原代码:
arr=[]
for i in range(10):
if i is 5:
for j in range(i):
arr.append(i)
缩进了三次
①for i in range(10)
②if i is 5
③for j in range(i)
列表中的元素:④j
列表解析:
arr=[j for i in range(10) if i is 5 for j in range(i)]
arr=[④ ① ② ③]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。