学习数据分析的预备知识
python基础知识
列表推导式与条件赋值
列表推导式是我觉得python最简便的地方了,通过列表推导式可以把很长的一段话缩减成很小的一部分,在之前的建模高教贝建模中,自己做的代码方法就显得很笨拙,很长一段时间想要好好学习一下推导式,现在就在datawhale的第20期pandas练习中+《利用python进行数据分析》,好好淦一下列表推导式:
看到有个新概念语法糖,于是查了一下资料:
语法糖就是在代码编辑中能够增强代码可读性的编码方式,这里的列表推导式当然属于其中,后面的条件赋值也是。
而列表推导式的特点就是允许过滤一个容器的元素,通过一种简明的表达式转换给过滤器,从而生成一个新的列表
其形式如下:
[expr for val in collection if condition ] # 列表推导式的形状
# 其等价于
result = []
for val in collection:
if condition:
result.append(expr)
条件赋值则是形如
value = x if confition else y
value
# 其等价的写法为
a,b=x,y
condition=condition_(bool) # 此处默认为True
if condition_:
value = a
else:
value = b
对上述两个语法糖举个栗子:
# 截断列表中的超过5的数字
L = range(10)
[i if i< =5 else 5 for i in L]
输出
[0, 1, 2, 3, 4, 5, 5, 5, 5, 5]
匿名函数(lambda)与map方法
匿名函数是指通过单个语句生成 函数的方法, 且该关键词仅表达“我们声明一个匿名函数”的意思。
匿名函数的特点就是清晰地表述一些映射关系,在少数几个地方使用,用户不关心函数的名字很少被重复使用。`
my_func = lambda x : 2*x
my_func(3)
输出的内容
6
[(lambda x:2*x)(i) for i in range(5)]
输出结果为
[0, 2, 4, 6, 8]
形如上式中的,再列表推导式中使用匿名函数映射,而对于这种映射,python提供了map函数实现,且返回的是一个map对象,需要通过list获得输出值:
list(map(lambda x:2*x,range(5)))
[0, 2, 4, 6, 8]
map可以是实现多个输入值的映射,往里面追加迭代对象
list(map(lambda x,y:str(x)+'_'+y,range(5),list("abcde")))
['0_a', '1_b', '2_c', '3_d', '4_e']
zip 和 enumerate方法
L1,L2,L3 = list('abc'),list('def'),list('hij')
list(zip(L1,L2,L3)) # 通过zip打包三个对象
输出结果:
[('a', 'd', 'h'), ('b', 'e', 'i'), ('c', 'f', 'j')]
zip方法可以处理任意长度的序列,其胜场的列表长度由最短的序列决定
seq1 = ['foo','bar','baz']
seq2 = [False,True]
list(zip(seq1,seq2))
[('foo', False), ('bar', True)]
enumerate是python的内建函数,当我们需要在遍历一个序列的同时追踪索引的时候,可以两个内容都获取的方式,我自己在做的时候是经常需要这种操作的。它返回的(i,value)元组的序列,i是元素的索引,value是值:
for i,value in enumerate(collection):
#其一般的使用方法
在对数据建立索引时,一种有效的方式是使用enumerate方法构造一个字典
some_list =['foo','bar','baz']
mapping={}
for i,v in enumerate(some_list):
mapping[v]=i # 对字典赋值
mapping
{'foo': 0, 'bar': 1, 'baz': 2}
可以使用zip进行多个遍历,此时和enumerate一起用会更加酸爽
for i,(a,b) in enumerate(zip(seq1,seq2)):
print('{0}:{1},{2}'.format(i,a,b))
输出
0:foo,False
1:bar,True
相对python提供的zip,也提供了*联合zip的解压方法
zipped = zip(L1,L2,L3)
list(zip(*zipped))
输出
[('a', 'b', 'c'), ('d', 'e', 'f'), ('h', 'i', 'j')]
前段时间自己自顾自的学习python,直接也跳过了基础内容就淦机器学习、学了pandas学sklearn。整个人学的一脸懵逼,这段时间通过datawhale的一个月的时间希望自己能把基础夯实,小白学东西实在是太难看了。
没有输出,就没有输入
刚刚看到导入的md文件有点问题,检查了一遍发现还好,最好别拉跨了。
希望一起学习一起交流