Python3 From Zero——{最初的意识:001~数据结构和算法}
一、从队列两端高效插入、删除元素,及保留固定数量的数据条目:
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起始数字
>>> for i,j in enumerate({'a':1,'b':2}.items(), start=10):
... print(i, j)
...
10 ('b', 2)
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
十一、 转换并同时计算数据:使用生成器推导式————高效、优雅;生成器方案会以迭代的方式转换数据,更省内存
# Determine if any .py files exist in a directory
import os
files = os.listdir('dirname')
if any(name.endswith('.py') for name in files):
print('There be python!')
else:
print('Sorry, no python.')
# Output a tuple as CSV
s = ('ACME', 50, 123.45)
print(','.join(str(x) for x in s)) #join用于连接字符串
# Data reduction across fields of a data structure
portfolio = [
{'name':'GOOG', 'shares': 50},
{'name':'YHOO', 'shares': 75},
{'name':'AOL', 'shares': 20},
{'name':'SCOX', 'shares': 65}
]
min_shares = min(s['shares'] for s in portfolio) # Original: Returns 20
min_shares = min(s['shares'] for s in portfolio)
# Alternative: Returns {'name': 'AOL', 'shares': 20}
min_shares = min(portfolio, key=lambda s: s['shares']) #生成一个迭代器
十二、合并多个字典或映射
思路1:from collections import ChainMap,仅是在逻辑上连接两个字典,并不创建新字典,优先查询位置在前的字典的数据,原字典的数据变动可以同步体现
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 } from collections import ChainMap
c = ChainMap(a,b)
print(c['x']) # Outputs 1 (from a)
print(c['y']) # Outputs 2 (from b)
print(c['z']) # Outputs 3 (from a)
思路2:dict_bak.update({new_dict}),更新原字典(的副本),原重复的key的value将被覆盖,仅能查询到新字典中的数据,原字典的变动无法同步体现
test = dict(a) #用dict生成原字典的副本,不破坏原字典数据
c = test.update(b)
print(c['z']) # Outputs 4 (from b)
Python3 From Zero——{最初的意识:001~数据结构和算法}的更多相关文章
- Python3 From Zero——{最初的意识:008~初级实例演练}
一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...
- Python3 From Zero——{最初的意识:006~数据编码与处理}
一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...
- Python3 From Zero——{最初的意识:003~数字、日期、时间}
一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...
- Python3 From Zero——{最初的意识:002~字符串和文本}
一.使用多个界定符分割字符串 字符串.split(',')形式只适用于单一分割符的情况:多分割符同时应用的时候,可使用re.split() >>> line = 'asdf fjdk ...
- Python3 From Zero——{最初的意识:000~Initial consciousness}
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...
- Python3 From Zero——{最初的意识:007~函数}
一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1 ...
- Python3 From Zero——{最初的意识:005~文件和I/O}
一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...
- Python3 From Zero——{最初的意识:004~迭代器和生成器}
一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ...
- Java数据结构和算法 - 哈希表
Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...
随机推荐
- 解决(Missing artifact com.oracle:ojdbc14:jar:11.2.0.4.0)
maven项目检索时报Missing artifact com.oracle:ojdbc14:jar:11.2.0.4.0 经过查阅资料知道原因为: Oracle 的 ojdbc.jar 是收费的,M ...
- python培训拾遗
20140421 1. 三大利器: dir----列出所有内部方法 a=1 dir(a) 可以列出所有内部方法,就是带两个下划线的:带一个下划线的是普通方法 help---查看帮助 help(a.bi ...
- 安装nodejs nvm
安装nodejs sudo apt-get install nodejs sudo apt-get install npm 安装nvm https://www.runoob.com/w3cnote/n ...
- thinkphp5.0多条件模糊查询以及多条件查询带分页如何保留参数
1,多条件模糊查询 等于:map[‘id′]=array(‘eq′,100);不等于:map[‘id′]=array(‘eq′,100);不等于:map[‘id’] = array(‘neq’,100 ...
- ssm+mysql 时间显示相差了12小时的问题 Gson
怎么改时区,连接字符串加时区都无效,后来才发现原来返回的是对的,并不是时区问题. 后来感觉是gson问题,关键是在其他数据表并没有这个问题. 把 gson改成 Gson gson = new Gson ...
- (9)centos7 安装与解压
1.zip/unzip zip 新file 旧file或文件夹 # 把旧文件和文件夹压缩成新文件 -r是文件夹下所有文件 zip -r a.zip ./doc #压缩当前目录 doc下的所有文件变成 ...
- asp.net core网关Ocelot的简单介绍& Ocelot集成Identity认证
文章简介 Ocelot网关简介 Ocelot集成Idnetity认证处理 Ocelot网关简介 Ocelot是一个基于netcore实现的API网关,本质是一组按特定顺序排列的中间件.Ocelot内 ...
- Comet OJ - Contest #4 B题 奇偶性
题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod ...
- 【Stanford Machine Learning Open Course】学习笔记目录
这里是斯坦福大学机器学习网络课程的学习笔记. 课程地址是:https://class.coursera.org/ml-2012-002/lecture/index 课程资料百度网盘分享链接:https ...
- 调用U9的标准接口