列表解析

本文旨在说明列表解析的用法

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)]

  1. arr显然是一个列表
  2. 列表中有一个for循环:for i in range(10),这里就是执行循环的地方
  3. 前面有一个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=[④ ① ② ③]


小白龙马
6 声望7 粉丝

心境最重要


引用和评论

0 条评论