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. Modelsim自动化仿真之do文件书写

    创建本地库 vlib ./work You must use vlib rather than operating system commands to creat a library directo ...

  2. [LC] 235. Lowest Common Ancestor of a Binary Search Tree

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  3. 全文检索ElasticSearch的简单使用笔记

    工具:kibana GET _search { "query": { "match_all": {} } } #创建索引结构 PUT sku { "m ...

  4. python——pymysql的安装

    pymysql是python程序连接mysql数据库的的第三方库,通过运行import pymysql 查看系统中是否有该模块,没有的话需要自行安装. 安装教程如下: 1.下载pymysql安装包,下 ...

  5. TCPCopy 线上流量复制工具

    TCPCopy是一种重放TCP流的工具,使用真实环境来测试互联网服务器上的应用程序. 一.描述: 虽然真实的实时流量对于Internet服务器应用程序的测试很重要,但是由于生产环境中的情况很负责,测试 ...

  6. SQL JOIN 和 UNION 用法

    1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P ...

  7. Turn and Stun server · J

    本文简介了Turnserver(Turn + Stun)服务器的搭建.Turnserver主要提供了stun服务,支撑NAT.防火墙穿透,turn服务器,支撑打洞失败时的数据中转.使用场景上类似于前端 ...

  8. 用PHP实现的快速排序算法(支持记录原始数组下标)

    代码如下 <?php /** * 快速排序 */ define("MAX_LENGTH_INSERT_SORT", 7); class QuickSort { /** * 交 ...

  9. 数据大爆炸:KDD 2016

    2016"> 饕餮盛宴 ACM SIGKDD国际会议(简称KDD)是数据挖掘领域的顶级国际会议,由ACM (计算机协会)的数据挖掘及知识发现专委会(SIGKDD)负责组织筹办.在现今如 ...

  10. Kubernetes搭建过程中使用k8s.gcr.io、quay.io、docker.io的镜像加速

    前言 因为众所周知的原因,在使用Kubernetes和docker的时候会出现一些镜像无法拉取或者速度较慢的情况,错误信息类似以下: [ERROR ImagePull]: failed to pull ...