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 ...
随机推荐
- inventor卸载/完美解决安装失败/如何彻底卸载清除干净inventor各种残留注册表和文件的方法
在卸载inventor重装inventor时发现安装失败,提示是已安装inventor或安装失败.这是因为上一次卸载inventor没有清理干净,系统会误认为已经安装inventor了.有的同学是新装 ...
- AUTODESK 卸载工具,完美彻底卸载清除干净autodesk各种软件残留注册表和文件
小伙伴是不是遇到 CAD/3dmax/maya/Revit/Inventor 安装失败或者安装不了的问题了呢?AUTODESK系列软件着实令人头疼,CAD/3dmax/maya/Revit/Inven ...
- windows下Jmeter压测端口占用问题
https://blog.csdn.net/weixin_43757847/article/details/88188091 1 前情提要人脸识别项目中,云平台新增了人脸识别的校验接口.考虑到存在大量 ...
- C++笔试常见问题
C++提供的编译预处理功能主要有以下三种: 宏定义 文件包含 条件编译 预编译又称为预处理 , 是做些代码文本的替换工作.处理#开头的指令 , 比如拷贝 #include包含的文件代码, #defin ...
- Win32下双缓冲绘图技术
一:双缓冲原理 为了解决窗口刷新频率过快所带来的闪烁问题,利用双缓冲技术进行绘图.所谓双缓冲技术,就是将资源加载到内存,然后复制内存数据到设备DC(这个比较快),避免了直接在设备DC上绘图(这个比较慢 ...
- iPhoneSE2要在印度独家生产真得没戏?
现在,关于iPhone SE2的消息层出不穷,总的来说,它是一款真实存在的手机,整体性能和iPhone5X/SE相似,大概可能差不多会加上一些"无线充电"之类的无聊功能.普通消费者 ...
- Mybatis-Generator相关配置demo
generatorConfig.xml配置信息 首先在resource中配置好datasource.propertise文件,包括数据库信息和mysql-connector的jar包位置. <? ...
- 使用Google App Engine开始新的网站开发学习
继长时间的迷茫后,我发现还是回归php网站开发更适合我,或者没有那么深刻,但至少要做点事情.不知道以后将从事什么样的工作,但现在找点事情做还是很好的.所以,为了激发我学习的热情,我在网上搜了一下免费云 ...
- React中key的讲解
通过阅读React的文档我们知道React这个框架的核心思想是,将页面分割成一个个组件,一个组件还可能嵌套更小的组件,每个组件有自己的数据(属性/状态);当某个组件的数据发生变化时,更新该组件部分的视 ...
- Java实体映射工具MapStruct的使用
官网地址:http://mapstruct.org/ MapStruct 是一个代码生成器,简化了不同的 Java Bean 之间映射的处理,所谓的映射指的就是从一个实体变化成一个实体.例如我们在实际 ...