在很多数据处理过程中,经常会见到列表生成器,因为它语法简单,很多复杂操作仅仅一行代码就搞定。
一 基本语法
基本语法: [表达式 for x in list]
a = [x for x in range(1,5)]
a
Out[112]: [1, 2, 3, 4]
二 条件分支
基本语法: [表达式 for x in list if 条件]
a = [x+3 for x in range(1,5) if x>2]
a
Out[116]: [6, 7]
三 else
基本语法: [表达式1 if 条件 else 表达式2 for x in list]
#如果大于2,则加3,否则加20
a = [x+3 if x>2 else x+20 for x in range(1,5)]
a
Out[118]: [21, 22, 6, 7]
四 其他
既然有列表解析,那么有没有元组解析式,字典解析式呢?答案是有的,下面介绍元组解析式(只需要把”[]“变“()”就好)
a = (x**2 for x in range(1,5))
a
Out[120]: <generator object <genexpr> at 0x000002098F06CCC8>
next(a)
Out[121]: 1
next(a)
Out[122]: 4
这里使用了next()函数进行输出
五 高级用法
尝试列表解析式用于数据补齐,在数据挖掘或者其他上游任务中,会遇到数据缺失或者维度变换等等问题,那如何使用python列表解析式进行数据补齐呢?见下面这个例子,对s_list 第二行进行补齐,2行命令就实现了
第一条,取每行数据的最大长度
第二条,进行填0补齐
s_list
Out[127]: [[1, 2, 3, 4, 5], [4, 5]]
max_len = max(len(i) for i in s_list)
a_list = [s+[0]*(max_len-len(s)) if max_len >len(s) else s[:max_len] for s in s_list]
a_list
Out[129]: [[1, 2, 3, 4, 5], [4, 5, 0, 0, 0]]