一、从队列两端高效插入、删除元素,及保留固定数量的数据条目:

collections.deque([iterable[,maxlen=N]])

a = collections.deque([1, 2],maxlen=3)

a.appendleft(3)

[3, 1, 2]

a.appendleft(4)

[4, 3, 1]

a.popleft()

[3, 1]

二、求队列中最大或最小的N个元素

思路1:heapq.nlargest(N, iterable, key=None)、heapq.nsmallest(N, iterable, key=xxx)

思路2:先排序,再切片:sorted(items)[:N]、sorted(items)[-N:]

如果对象是一个字典,则可以先用zip将字典的key、value反转形成包含元组的列表,如:min_xxx = min(zip(dict.values(), dict.key()))

三、实现自定义优先级队列

heapq.heappush(heap, item),item表示自定义的优先级标识,可以为元组、列表等,用以实现多级联排

heapq.heappop(heap),剔除并显示综合优先级最小的元素

四、字典的key、key-value支持常见的集合操作(value不支持),如并集(&)、交集(|)、差集(单向-,双向^)等,无须事先转换为集合,可用于比较两个字典之间keys或items的异同、重叠等,如:a.keys() - b.keys(),a.items() & b.items()

五、找出序列中出现次数最多的元素

首先collections.Counter(list/tuple/str)形成一个Counter对象,然后collections.Counter.most_common(N),即可得出“出现次数最多的前N个元素”。在底层实现中,Counter是一个字典,在元素和它们出现的次数之间做了映射;Counter之间是可以进行+-*/等数学运算的、用.update追加源数据以更新次数统计结果等;详情help(collections.Counter)

六、筛选「可同时替换」序列中的元素

列表推导式,示例:test = [n**2 if n > 0 else 0 for n in mylist]

针对复杂筛选条件,先将筛选逻辑放到单独的函数中,然后使用内建的filter()函数处理:test = list(filter(my_def, values)),只显示使my_def(通常为try-except结构)结果为True的value组成的列表

七、从字典中提取符合自定义条件的字集

示例:sub_dict = {key: value for key, value in my_dict.items() if value > 200或if key in other_dict}

八、enumerate(iterable, start=0),为原始对象添加index序列,可自定义index起始数字

  1. >>> for i,j in enumerate({'a':1,'b':2}.items(), start=10):
  2. ... print(i, j)
  3. ...
  4. 10 ('b', 2)
  5. 11 ('a', 1)

九、内置函数:sorted、reversed,不修改源数据;.sort、.reverse是列表、字典等的方法,原地修改源数据

sorted(iterable, key=None, reverse=False)

十、abs(int/float)、any(iterable)、all(iterable)

abs:返回绝对值

all():如果迭代器里面的任何元素都非零或非空,返回True;否则返回False

any():如果迭代器里面的其中一个或多个元素非零或非空,返回True;否则返回False

十一、 转换并同时计算数据:使用生成器推导式————高效、优雅;生成器方案会以迭代的方式转换数据,更省内存

  1. # Determine if any .py files exist in a directory
  2. import os
  3. files = os.listdir('dirname')
  4. if any(name.endswith('.py') for name in files):
  5. print('There be python!')
  6. else:
  7. print('Sorry, no python.')
  8. # Output a tuple as CSV
  9. s = ('ACME', 50, 123.45)
  10. print(','.join(str(x) for x in s)) join用于连接字符串
  11. # Data reduction across fields of a data structure
  12. portfolio = [
  13. {'name':'GOOG', 'shares': 50},
  14. {'name':'YHOO', 'shares': 75},
  15. {'name':'AOL', 'shares': 20},
  16. {'name':'SCOX', 'shares': 65}
  17. ]
  18. min_shares = min(s['shares'] for s in portfolio)
  19.  
  20. # Original: Returns 20
  21. min_shares = min(s['shares'] for s in portfolio)
  22. # Alternative: Returns {'name': 'AOL', 'shares': 20}
  23. min_shares = min(portfolio, key=lambda s: s['shares']) #生成一个迭代器

十二、合并多个字典或映射

思路1:from collections import ChainMap,仅是在逻辑上连接两个字典,并不创建新字典,优先查询位置在前的字典的数据,原字典的数据变动可以同步体现

  1. a = {'x': 1, 'z': 3 }
  2. b = {'y': 2, 'z': 4 }
  3.  
  4. from collections import ChainMap
  5. c = ChainMap(a,b)
  6. print(c['x']) # Outputs 1 (from a)
  7. print(c['y']) # Outputs 2 (from b)
  8. print(c['z']) # Outputs 3 (from a)

思路2:dict_bak.update({new_dict}),更新原字典(的副本),原重复的key的value将被覆盖,仅能查询到新字典中的数据,原字典的变动无法同步体现

  1. test = dict(a) #用dict生成原字典的副本,不破坏原字典数据
    c = test.update(b)
  2. print(c['z']) # Outputs 4 (from b)

Python3 From Zero——{最初的意识:001~数据结构和算法}的更多相关文章

  1. Python3 From Zero——{最初的意识:008~初级实例演练}

    一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...

  2. Python3 From Zero——{最初的意识:006~数据编码与处理}

    一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...

  3. Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...

  4. Python3 From Zero——{最初的意识:002~字符串和文本}

    一.使用多个界定符分割字符串 字符串.split(',')形式只适用于单一分割符的情况:多分割符同时应用的时候,可使用re.split() >>> line = 'asdf fjdk ...

  5. Python3 From Zero——{最初的意识:000~Initial consciousness}

    http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...

  6. Python3 From Zero——{最初的意识:007~函数}

    一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1 ...

  7. Python3 From Zero——{最初的意识:005~文件和I/O}

    一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...

  8. Python3 From Zero——{最初的意识:004~迭代器和生成器}

    一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ...

  9. Java数据结构和算法 - 哈希表

    Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...

随机推荐

  1. AcWing 157. 树形地铁系统 (hash判断树同构)打卡

    一些主要城市拥有树形的地铁系统,即在任何一对车站之间,有且只有一种方式可以乘坐地铁. 此外,这些城市大多数都有一个中央车站. 想象一下,你是一名在拥有树形地铁系统的城市游玩的游客,你想探索该城市完整的 ...

  2. 搭建hadoop集群 单机版

    二.在Ubuntu下创建hadoop用户组和用户         这里考虑的是以后涉及到hadoop应用时,专门用该用户操作.用户组名和用户名都设为:hadoop.可以理解为该hadoop用户是属于一 ...

  3. CSS:CSS Display(显示) 与 Visibility(可见性)

    ylbtech-CSS:CSS Display(显示) 与 Visibility(可见性) 1.返回顶部 1. CSS Display(显示) 与 Visibility(可见性) display属性设 ...

  4. 剑指offer——49礼物的最大价值

    题目描述 在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格,知道到达棋盘的右下角.给定一个棋盘及其上面 ...

  5. MySql 主从复制及深入了解

    分享一个不错的mysql文章 https://segmentfault.com/a/1190000008942618

  6. js关于if()else{}中的判定条件的认识,各种数据类型转换为Boolean类型的转换规则

    博客搬迁,给你带来的不便敬请谅解! http://www.suanliutudousi.com/2017/09/24/js%E5%85%B3%E4%BA%8Eifelse%E4%B8%AD%E7%9A ...

  7. Redis数据结构之字典-dict

    dict是Redis服务器中出现最为频繁的复合型数据结构,除hash使用dict之外,整个Redis数据库中所有的key和value也会组成一个全局字典,还有带过期时间的key集合也是一个字典. zs ...

  8. JS中的垃圾回收(GC)

    垃圾回收(GC): 1. 就像人生活的时间长了会产生垃圾一样,程序运行过程中也会产生垃圾,这些垃圾积攒过多以后,会导致程序运行的速度过慢, 所以我们需要一个垃圾回收的机制,来处理程序运行中产生的垃圾. ...

  9. Django 框架之前

    返回主目录:Django框架 内容目录: 一.Django框架之前的内容 1.1 web应用程序的架构 1.2 HTTP协议 1.3 纯手写简单web框架 一.Django框架之前d的内容 1.1 w ...

  10. VS2017 打包(详细)

    1.安装打包插件:Microsoft Visual Studio 2017安装程序项目 ​ 2.联机查找下面的组件,然后安装,重启VS,进行插件安装 3.新建安装项目,另外,有些人可能会想这么多安装类 ...