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是一个包含诸多容器数据类型的模块(枚举),常用的有:

    1. defaultdict
    2. counter
    3. deque
    4. namedtuple
    5. 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中那些让开发事半功倍的模块的更多相关文章

  1. Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)

    Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...

  2. python中给程序加锁之fcntl模块的使用

    python 中给文件加锁——fcntl模块import fcntl 打开一个文件##当前目录下test文件要先存在,如果不存在会报错.或者以写的方式打开f = open('./test')对该文件加 ...

  3. Python中的日志记录方案-logging模块&loguru模块

    原文链接 原创: 崔庆才 在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样.在使用时我们需要配置一些 Handler.Formatter ...

  4. Python中操作HTTP请求的urllib模块详解

    urllib 是 Python 标准库中用于网络请求的库.该库有四个模块,分别是urllib.request,urllib.error,urllib.parse,urllib.robotparser. ...

  5. 2016/1/3 Python中的多线程(2):threading模块

    之前提了Python多线程的一点使用,今天介绍更好的threading模块,它提供了Thread类和一些比较好用的同步机制. 先介绍Thread类 threading模块中的Thread类有很多thr ...

  6. python中处理命令行参数的模块optpars

    optpars是python中用来处理命令行参数的模块,可以自动生成程序的帮助信息,功能强大,易于使用,可以方便的生成标准的,符合Unix/Posix 规范的命令行说明.使用 add_option() ...

  7. Python中import导入上一级目录模块及循环import问题的解决

    转自:https://www.cnblogs.com/sjy18039225956/p/9265461.html 使用python进行程序编写时,经常会使用第三方模块包.这种包我们可以通过python ...

  8. Python中一些内建函数及os等模块的用法

          len(obj)                   # 求长度:obj可以是str.list等对象    split(str, num)          # str-分割符,默认空格: ...

  9. Python中的上下文管理器(contextlib模块)

    上下文管理器的任务是:代码块执行前准备,代码块执行后收拾 1 如何使用上下文管理器: 打开一个文件,并写入"hello world" filename="my.txt&q ...

随机推荐

  1. 吴裕雄--天生自然python学习笔记:Python CGI编程

    什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户 ...

  2. Nginx笔记总结二:Nginx编译参数

    -prefix=                                                    安装路径-with-http_ssl_module               ...

  3. 在python中使用json

    在服务器和客户端的数据交互的时候,要找到一种数据格式,服务端好处理,客户端也好处理,这种数据格式应该是一种统一的标准,不管在哪里端处理起来都是统一的,现在这种数据格式非常的多,比如最早的xml,再后来 ...

  4. 生死状:苹果VS他的供应商

    据知情人士透露,苹果已经组建了代号为Titan的汽车团队,并招募了数百名员工,准备进入汽车领域,iCar大有呼之欲出之势.事实上,苹果CEO蒂姆-库克早在去年就参观了宝马位于莱比锡的核心工厂,学习如何 ...

  5. 重大改革!Python将被加入高考科目!

    未来大学生将分为两种:一种是编程好的人,另一种是编程超好的人. Python 将被纳入高考科目 近期,浙江省信息技术课程改革方案出台,Python 确定进入浙江省信息技术高考,从2018年起浙江省信息 ...

  6. Cenots 7 安装mysql cluster 通过rpm 包

    环境:Cenots 7 MG:192.168.0.105 NDB:192.168.0.108 NDB:192.168.0.109 SQL:192.168.0.111 SQL:192.168.0.107 ...

  7. VirtualBox Ubuntu设置静态ip亲测可行

    virtualbox重启后ip会自动分配,不固定.项目中需要配置ip地址,因此每次ip换了,需要重新配置和编译. 网上搜罗好几种方法进行配置,尝试下面这种简单并且可行: 步骤一:查看虚拟机网卡 ifc ...

  8. [面试专题]前端需要知道的web安全知识

    前端需要知道的web安全知识 标签(空格分隔): 未分类 安全 [Doc] Crypto (加密) [Doc] TLS/SSL [Doc] HTTPS [Point] XSS [Point] CSRF ...

  9. 【Amaple教程】5. 插件

    Amaple 拥有非常强大插件功能,这也是它的突出功能之一,Amaple插件一般表现为功能块(函数)或功能块(包含一系列函数和属性的Object对象),它除了支持Amaple规范定义的插件外,还支持所 ...

  10. JZOJ 3927. 【NOIP2014模拟11.6】可见点数

    3927. [NOIP2014模拟11.6]可见点数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description ZP ...