前言
见到过类似于下面这样一道题目
将以下代码用一行python表示
res=[]
i=300
while i<=500:
if i%3==0 and i%5!=0:
res.append(i)
i+=1
print(res)
用一行代码表示就是
res1=list(filter(lambda x:x%5 and not x%3,range(300,501)))
print(res1)
一些学习记录以及思考,有误或不严谨的地方还请指出
1.lambda
直接看语法:使用冒号(:)分割函数的参数及返回值,冒号前面是参数,后面是函数的表达式或者说是返回值
例如
f
=
l
a
m
b
d
a
f=lambda
f=lambda
x
:
x
+
1
x:x+1
x:x+1写成普通的函数就是
def f(x):
return x+1
f=lambda x,y:x+y
#就等价于
def f(x,y):
return x+y
2.filter
f
i
l
t
e
r
(
)
filter()
filter()函数是一个过滤器,就是在数据中去提取出满足条件的信息。
基本用法:两个参数,第一个可以是函数也可以是None,也就是筛选的条件;第二个参数是一个可迭代对象,即我们要在这个可迭代对象中寻找满足条件(返回True值)的数据,拿最上面那个题来说
f
i
l
t
e
r
(
l
a
m
b
d
a
filter(lambda
filter(lambda
x
:
x
%
5
x:x\%5
x:x%5
a
n
d
and
and $not
x
%
3
x\%3
x%3 ,
r
a
n
g
e
(
300
,
501
)
)
range(300,501))
range(300,501))
前面的
l
a
b
m
d
a
labmda
labmda函数式返回该数是否 可以整除3但是不能整除5,后面的
r
a
n
g
e
(
300
,
501
)
range(300,501)
range(300,501)即判断的数据范围
举简单的例子
list(filter(lamnda x:x%2,range(10)))
#返回 [1,3,5,7,9]
#这样就将[0,9]闭区间范围内的奇数过滤了出来
list(filter(None,[0,1,0,1,True,False]))
#返回[1,1,True]
3.map
m
a
p
map
map 即“映射”,用法:和
f
i
l
t
e
r
filter
filter类似,两个参数,第一个是函数,第二个是可迭代对象,对可迭代对象中的每个元素都应用第一个函数知道所有元素都应用完毕。
经常在数据结构的题目中会用到,在ACM模式下
比如输入
10
10
10
9
9
9,分别把它们赋值给
m
m
m 和
n
n
n
m,n=map(int,input().strip().split())
#这样就赋值结束
不熟悉字符串的话可能看起来有点模糊
list(map(lambda x:x+1,range(4)))
#要匹配的数是0 1 2 3
#最后返回[1,2,3,4]
注意到
m
a
p
map
map 后都加了
l
i
s
t
(
)
list()
list() 来返回最后的结果,是因为
m
a
p
(
)
map()
map() 函数生成的结果序列不会把全部结果显示出来,要想获得结果序列,可以使用
l
i
s
t
(
)
list()
list() 方法
上面我把“序列”加粗,是因为
m
a
p
(
)
map()
map()只能应用于序列,而无法应用于数据框
4. 数据框中的一些操作
在pandas DataFrame中与 m a p ( ) map() map()函数很类似的有 a p p l y ( ) apply() apply() 和 a p p l y m a p ( ) applymap() applymap()
方法 | 作用 | 应用限制 |
---|---|---|
apply() | 可以对数据框的某一行或某一列中的元素进行操作,也可以对所有元素 | 序列和数据框中都可以 |
applymap() | 对数据框中的每一个元素进行操作 | 只能应用于数据框 |
a p p l y m a p applymap applymap例子
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"A":np.random.randn(3),
"B":np.random.randn(3),
"C":np.random.randn(3)
}
)
保留两位小数
df2=df.applymap('{0:.02f}'.format)
print(df2)
#注意这样转换后的不再是浮点数,而是字符串
求A列值的总和
a
p
p
l
y
apply
apply例子
如果不规定
a
x
i
s
axis
axis,apply方法会默认
a
x
i
s
=
0
axis=0
axis=0
原理这篇文章very nice!
https://zhuanlan.zhihu.com/p/100064394