链表推导式在很多代码里都出现过,但是语法规则不太了解,今天做个记录。
#我感觉链表推导式就是让代码看上去更清爽。。。
a,b for c, d in
1 | [In] |
Python 中形如 xx for xx in yy 的链表推导式
以 a = [0,1,2,3,4,5] 为例
1. 最简单的情况,使用链表推导式时不需要任何判断,即处理的对象内没有任何特殊值需要特别处理的时候
比如:求 a 内每个元素的平方,我们直接写
b = [ x**2 for x in a]
b [0, 1, 4, 9, 16, 25]
2. 当增加限制条件时,就需要进行判断,然后处理,就需要在链表推导式内添加判断条件
比如:取出 a 内 > 0 的元素
c = [ x for x in a if x > 0 ]
c [1, 2, 3, 4, 5]
3. 链表推导式处理处理内容,还有一个作用是定位,这样可以满足我们先定位再处理的需求
比如:我们要知道 a 内偶数元素的位置
a_even_id = [ i for i,x in enumerate(a) if x%2 == 0 ]
a_even_id
[0, 2, 4]
4. 下面进行难度提升,当处理的对象不是纯数字,即不是我们所需要的数据格式或对象时
A0 = [ 0,’ ‘,1,2,4,5,’ ‘,’3’,2]
A是由整数(int)和空格’ ‘, 以及字符串’3’组成的
我们要将空格替换为 0 ,将’3’ 替换为 整形 3
(1).判断是否是整形: type(x) == int
(2).不是整形,则判断是否是空格:x == ‘ ‘,是则替换为 0,
(3).判断是否是数字构成的字符串:x.isdigit(),(isdigit()是字符串方法),是则转化为整形数
(4). 如果是其他,则均替换为 0 ,(这一步必须有,以为要穷尽多有可能,否则会因为条件没有覆盖到而导致无法执行)
A = [ x if type(x)==int else 0 if x == ‘ ‘ else int(x) if x.isdigit() else 0 for x in A0 ]
A [0, 0, 1, 2, 4, 5, 0, 3, 2]
5. 如果只需要处理 A0 内的整形数据,而舍弃其他的数据,那么我们不必像4中描述的那么复杂,只需要:
A_int = [x for x in A0 if type(x)==int ]
A_int
[0, 1, 2, 4, 5, 2]