python中那些让开发事半功倍的模块
1. Map
Map会将一个函数映射到一个输入列表的所有元素上
ex: 有一个列表: [1,2,3,4,5,6], 现在要求把列表每个元素乘以10
如果你还不知道Map,那你可能会这样做:
list1 = [1,2,3,4,5,6]
list2 = list()
for i in list1:
list2.append(i*10)
print(list2)
# output: [10, 20, 30, 40, 50, 60]
以上写法没问题,但是不够pythonic。 接下来我们看下如何利用map让代码更加优雅吧!
list1 = [1,2,3,4,5,6]
list2 = map(lambda item:item*10, list1)
print(list2)
# output: <map object at 0x0000017CD1F4BE80>
你可能会很奇怪: 为什么输出不是 [10, 20, 30, 40, 50, 60],其实是因为在python3中map返回的是一个迭代器对象 而在python2中返回的是一个就直接是list
为了兼容:我们稍作修改:
list1 = [1,2,3,4,5,6]
list2 = list(map(lambda item:item*10, list1))
print(list2)
# output:
[10, 20, 30, 40, 50, 60]
2. Filter
Filter用于过滤列表中的元素,并返回一个满足过滤条件的元素的列表
list1 = [1,2,3,4,5,6]
list2 = list(filter(lambda item: item > 3, list1))
print(list2)
# output: [4, 5, 6]
3. Reduce
Reduce是一个可以对列表进行计算的高阶函数,例如计算一组数据的乘积
from functools import reduce
list1 = [1,2,3,4,5,6]
list2 = reduce(lambda x, y: x*y, list1)
print(list2)
# output: 720
4. Collections(容器)
Collections是一个包含诸多容器数据类型的模块(枚举),常用的有:
- defaultdict
- counter
- deque
- namedtuple
- enum.Enum
defaultdict
这个模块与dict的不同在于不需要检查dict的key是否存在,defaultdict()方法会为字典提供默认值:
在dict中,给字典进行嵌套赋值时,必须保证key存在,否则会触发KeyError的异常:
mydict = {}
mydict['userInfo']['age'] = 30
print(mydict)
# output:
# Traceback (most recent call last):
# File "sd.py", line 21, in <module>
# mydict['userInfo']['age'] = 30
# KeyError: 'userInfo'
让我们换defaultdict试试:
import collections
defaultdictTree = lambda : collections.defaultdict(dict)
mydefault = defaultdictTree()
mydefault['userInfo']['age'] = 30
print(mydefault)
print(dict(mydefault))
# output:
#defaultdict(<class 'dict'>, {'userInfo': {'age': 30}})
#{'userInfo': {'age': 30}}
counter
counter是一个计数器,用于统计数据。当前他还可以统计一个文件,如果你需要.
import collections
result = collections.Counter('我是一个中国人, 我爱中国')
print(result)
# output: Counter({'我': 2, '中': 2, '国': 2, '是': 1, '一': 1, '个': 1, '人': 1, ',': 1, ' ': 1, '爱': 1})
deque
deque是一个双端队列,允许从两头插入删除元素
from collections import deque
mydeque = deque()
# 向后添加
mydeque.append('a')
mydeque.append('b')
mydeque.append('c')
print(mydeque) # 向前添加
mydeque.appendleft('')
print(mydeque) # 从后删除
mydeque.pop()
print(mydeque) # 从前删除
mydeque.popleft()
print(mydeque) # 向后合并拓展
mydeque.extend(['d', 'e'])
print(mydeque) # 向前合并拓展
mydeque.extendleft(['',''])
print(mydeque) # output:
#deque(['a', 'b', 'c'])
#deque(['1', 'a', 'b', 'c'])
#deque(['1', 'a', 'b'])
#deque(['a', 'b'])
#deque(['a', 'b', 'd', 'e'])
#deque(['9', '8', 'a', 'b', 'd', 'e'])
定长队列
mydeque = deque(maxlen=5) # 定长队列,超出长度,最左边的元素将被删除
mydeque.extend([1,2,3,4])
print(mydeque)
mydeque.append(5)
print(mydeque)
mydeque.append(6)
print(mydeque) # output
#deque([1, 2, 3, 4], maxlen=5)
#deque([1, 2, 3, 4, 5], maxlen=5)
#deque([2, 3, 4, 5, 6], maxlen=5)
python中那些让开发事半功倍的模块的更多相关文章
- Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)
Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...
- python中给程序加锁之fcntl模块的使用
python 中给文件加锁——fcntl模块import fcntl 打开一个文件##当前目录下test文件要先存在,如果不存在会报错.或者以写的方式打开f = open('./test')对该文件加 ...
- Python中的日志记录方案-logging模块&loguru模块
原文链接 原创: 崔庆才 在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样.在使用时我们需要配置一些 Handler.Formatter ...
- Python中操作HTTP请求的urllib模块详解
urllib 是 Python 标准库中用于网络请求的库.该库有四个模块,分别是urllib.request,urllib.error,urllib.parse,urllib.robotparser. ...
- 2016/1/3 Python中的多线程(2):threading模块
之前提了Python多线程的一点使用,今天介绍更好的threading模块,它提供了Thread类和一些比较好用的同步机制. 先介绍Thread类 threading模块中的Thread类有很多thr ...
- python中处理命令行参数的模块optpars
optpars是python中用来处理命令行参数的模块,可以自动生成程序的帮助信息,功能强大,易于使用,可以方便的生成标准的,符合Unix/Posix 规范的命令行说明.使用 add_option() ...
- Python中import导入上一级目录模块及循环import问题的解决
转自:https://www.cnblogs.com/sjy18039225956/p/9265461.html 使用python进行程序编写时,经常会使用第三方模块包.这种包我们可以通过python ...
- Python中一些内建函数及os等模块的用法
len(obj) # 求长度:obj可以是str.list等对象 split(str, num) # str-分割符,默认空格: ...
- Python中的上下文管理器(contextlib模块)
上下文管理器的任务是:代码块执行前准备,代码块执行后收拾 1 如何使用上下文管理器: 打开一个文件,并写入"hello world" filename="my.txt&q ...
随机推荐
- iOS应用程序开发——解决iOS7之前版本与之后版本下app启动图片跳动问题
之前开发的app都是针对iOS6(兼容iOS5),所以在开发之初也出现了启动图片向下跳动的现象,通过网上的解决方法,代码中做了处理(“-20”): _imageView.frame = CGRectM ...
- javaweb 中 error-page
我们的请求找不到时,会跳到错误页面,tomcat提供了一个错误页面,但是不太好.分析:tomcat自带错误页面不好的原因:有一下两点: 1.不好看: 2.不能为seo做出贡献.思考:如何解决以上问题? ...
- XML的四种解析器(dom_sax_jdom_dom4j)原理及性能比较[收藏]
1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定 ...
- Mysql简单总结
基于Mac OS X系统 MySQL的安装和配置 首先进入 MySQL 官网,选择免费的Community版:MySQL Community Server.MySQL 官网提供了tar.gz和dmg两 ...
- Kubelet
Kubelet 相关博客 Kubelet组件深度解析 Kubelet组件解析 Kubelet运行机制分析 Kubelet与apiserver通信 ___ Kubelet组件运行在Node节点上,维持运 ...
- Java8-19-lambda 重构代码
通过本书的前七章,我们了解了Lambda和Stream API的强大威力. 你可能主要在新项目的代码中使用这些特性.如果你创建的是全新的Java项目,这是极好的时机,你可以轻装上阵,迅速地将新特性应用 ...
- HBase源码系列之HFile
本文讨论0.98版本的hbase里v2版本.其实对于HFile能有一个大体的较深入理解是在我去查看"到底是不是一条记录不能垮block"的时候突然意识到的. 首先说一个对HFile ...
- hadoop地址配置、内存配置、守护进程设置、环境设置
1.1 hadoop配置 hadoop配置文件在安装包的etc/hadoop目录下,但是为了方便升级,配置不被覆盖一般放在其他地方,并用环境变量HADOOP_CONF_DIR指定目录. 1.1.1 ...
- Python列表倒序输出及其效率
Python列表倒序输出及其效率 方法一 使用Python内置函数reversed() for i in reversed(arr): pass reversed返回的是迭代器,所以不用担心内存问题. ...
- 7-44 jmu-python-区间数之和 (10 分)
输入一个区间,计算里面能被3整除或被5整除的数和. 输入格式: 每行输入一个数据,代表区间左界和右界.区间包含左界和右界.数据必须是整数. 输出格式: 满足条件数和. 输入样例: 2 10 输出样例: ...