查看原文
其他

优雅的map()

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王碧琪 文字编辑:戴   雯 技术总编:张   邯

爬虫俱乐部云端课程来袭!

爬虫俱乐部将于2020年8月25日至28日在线上举行Stata数据分析法律与制度专题训练营,主要是为了让学员掌握Stata软件进阶操作,涉及内容包括基本字符串函数及其应用、正则表达式、法律与制度数据网络爬虫技巧、判案文书的文本分析等技术。详情请参考8月Stata数据分析法律与制度专场来啦!

    另外,爬虫俱乐部于2020年7月在线上举办的Stata与Python编程技术训练营已圆满结束。应广大学员需求,我们的课程现已在腾讯课堂双双上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠劵!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元

导读


Python有许多强大好用的内置函数,系列推文《Python常见内置函数用法(四)》等篇中介绍过一些,今天小编将带领大家继续了解一个关于遍历和迭代的函数:map()。

       map函数会根据提供的函数对指定序列做映射。其语法为:map(function,iterable)。也就是对iterable中的每一个元素进行function的运算。

1.第一个例子

我们想要实现这样一个目的:判断一组数中每个数字是奇数还是偶数,并返回一个列表,列表中包含判断结果。

1.1 不使用map函数

如果没有使用map函数,该如何实现呢?可以考虑使用for循环进行遍历。
list1=[]for num in range(1,6): if num%2==0: list1.append(f'{num} is even.') else:list1.append(f'{num} is odd.') print(list1)
得到结果:
['1 is odd.', '2 is even.', '3 is odd.', '4 is even.', '5 is odd.']

1.2 使用map函数
首先定义一个函数用于判断并返回结果,接下来取1-5这5个数代入。
def f1(n): if n%2==0: return f'{n} is even.' else: return f'{n} is odd.'
print(map(f1,range(1,6)))
结果是:
<map object at 0x00000178550186A0>
说明,使用map函数得到的是一个map对象,没办法得到其中的内容,查看它的type。
print(type(map(f1,range(1,6))))
结果是:
<class 'map'>
因此将结果转成列表:
print(list(map(f1,range(1,6))))
结果是:
['1 is odd.', '2 is even.', '3 is odd.', '4 is even.', '5 is odd.']
所以,为了实现以上目的,首先定义f1,之后使用一行代码,就可以得到目标list了。
可以看出,使用map函数避免了定义空列表、将内容append进入列表、定义for循环的过程,大大减少了代码量,提升了代码可读性。

2.第二个例子

上一个例子是对列表进行map函数的应用,这一个例子将对str对象进行map函数的使用。我们想提取出列表中的人名,并且将不规范的人名变成首字母大写,其余字母小写。
初始列表如下:
list2=['beCky:2333','LISa:1234','tOMY:2580']
定义f2函数,观察初始列表,想要获取人名,则可以先将每个元素按照“:”分割,然后取第0个元素。想要将人名规范化,可以使用str中的capitalize函数,用于使首字母大写、其余字母小写。
def f2(n): return str.capitalize(n.split(':')[0])
print(map(f2,list2))print(type(map(f2,list2)))
结果是:
<map object at 0x00000178550188D0><class 'map'>
得到的是一个迭代器,为了拿到每一个内容,使用for进行遍历。
for name in map(f2,list2): print(name)
结果是:
BeckyLisaTomy
可以看出,map函数得到的是一个迭代器(一个对象),想要获取迭代器中的每一个内容,可以使用for循环遍历;此时不使用map函数也能实现,直接使用for循环,得到的是多个单个元素的内容(多个对象)。




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
Python实现Excel中vlookup函数功能
Stata实现Excel中vlookup函数功能
gen与egen,傻傻分不清楚?

用WordStat看中国日报新闻(二)

一招轻松合并文件——openall命令介绍

爬虫俱乐部平安经
一个函数实现PDF文档合并与拆分
补全股票代码位数的一百种姿势

明星闪闪亮:各校高被引论文

高校经管类核心期刊发文排行榜|2010-2019

PDF图片提取
PDF文档转换成图片

split和nsplit助你轻松拆分

集成学习介绍之三——Stacking算法

PyMuPDF提取文本信息

Mylabels命令介绍  

用WordStat看中国日报新闻  

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存