map()&zip()函数引发的案例&常见的python题
先来看一道题:
一行代码实现1+2+3+...+100。
方法一:
sum(range(1,101))
输出:5050
方法二:
import numpy as np np.sum(np.arange(1,101)) #5050
再来看一道题:
一行代码实现由[1,2,3,4,5]生成[1,4,9,16,25]。
方法一:
list(map(lambda x:x**2,[1,2,3,4,5]))
输出:[1,4,9,16,25]
方法二:
import numpy as np print(list(np.square([1,2,3,4,5]))) #求平方 [1, 4, 9, 16, 25] print(list(np.sqrt([1,4,9,16,25]))) #开根号 [1.0, 2.0, 3.0, 4.0, 5.0]
print([int(i) for i in list(np.sqrt([1,4,9,16,25]))]) #开跟取整 [1, 2, 3, 4, 5]
把类别变量转换为数字
import pandas as pd data=pd.DataFrame(data={'老师':['是','否','是','是','否'], '付款':[1,1,1,0,0]}, index=['001','002','003','004','005']) data['老师']=data['老师'].map({'是':1,'否':0}) data
输出:
扩展:
zip函数
map函数跟zip函数有时候容易搞混
zip(iterables,iterables,..) 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组;
在 Python 3.x 中为了减少内存,zip() 返回的是一个zip对象。如需展示列表,需手动 list() 转换
用列表生成式遍历
X=['a','b','c','d'] Y=[1,2,3,4] print([i for i in zip(X,Y)])
输出:[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
生成可迭代对象和列表
X=['a','b','c','d'] Y=[1,2,3,4] XY=zip(X,Y) print(zip(X,Y)) print(list(XY))
输出:
<zip object at 0x11b799a08>
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
转为字典类型
dict(zip(X,Y))
输出:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
for循环分别遍历相应位置
X=['a','b','c','d'] Y=[1,2,3,4] for i,j in zip(X,Y): print(i,j)
输出:
再来一道题:
输出列表求和[2,22,222,2222,...],列表的几位数由输入决定
a=int(input("请输入位数,只能输入数字")) print("{}位数".format(a)) list_b=[] for i in range(1,a+1): b=2 b=str(b) #转化为字符串 b=b*i list_b.append(b) list_b=[int(i) for i in list_b] print(list_b) print(sum(list_b))
输入:
输出:
种一棵树最好的时间是十年前 其次是现在