关于Python 的链表推导式的简单应用

Python 链表推导式的简单应用

最近接触了python的链表推导式,对于它的使用有了一点心得。
python的列表推导式:

即形如 b = [ x*x for x in a]
或 c = [ i for i,x in enumerate(a) if x > 0]

上述只是python链表推导式的形式,但是如果能理解、好好体会其形式和条件,以及写法,的确会给自己带来效率上的提升。
所说的效率提升,是不需要去编写遍历对象的for循环等代码,只需要简单的一行代码即可完成,而且实现的效率比循环遍历语句要快很多。

# 以 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]

我们可以注意到 4 和 5 的区别:

4 中,我们对A0内的每一个元素均做了处理,将每一个元素位置填充上了我们处理的结果,所以,我们将 ‘x处理方式 if x满足的条件’ 写在了 ‘for x in A0’ 之前
5 中,我们只取出符合条件的部分元素,而不是A0 中的每一个元素均处理,不符合条件的元素均被舍弃了,这里我们将’if x 满足的条件’写在了 ‘for x in A0’ 之后

上述的区别是很明显的,也是我们在使用链式推导式时要掌握的,这样可以帮助我们更好地使用这一语法形式

猜你喜欢

转载自blog.csdn.net/qq_22022063/article/details/80718731
今日推荐