Python将列表作为栈和队列
Collections中的各种方法
一、各种方法介绍
Counter 统计个数 elements most_common subtract
defaultdict 字典默认值
ChainMap 合并多个映射对象(字典)
OrderdDict 有顺序的字典
deque 双向队列,可限制长度 append,appendleft,ratote
namedtuple 命名元祖
二、代码部分
from collections import Counter, defaultdict, ChainMap, OrderedDict, deque, namedtuple "1.Counter"
# 三个方法,在前面的博客词频统计有学习过。
s = 'de8g love python so much'
counter = Counter(s)
# print(counter, type(counter))
# print(list(counter.elements())) print(counter.most_common(5)) # 排序
counter.subtract('o') # 对某一个统计减少一次
print(counter.most_common(5)) # 排序 "2. 默认字典"
# 默认字典defaultdict 在lambda中学习过
defaultdict(lambda: 0)
defaultdict(lambda: 'abc')
c = defaultdict(lambda: (3,6))
c['a']
print(c) # 默认字典在传统的统计里面使用
s = 'de8ug loves you so de8ug loves you so much you so much much '
# count_spilt = {}
dc_words = defaultdict(int) # 或者 lambda: 0
dc_words[10]
for i in s.split(' '):
# if i in count_spilt:
# count_spilt[i] += 1
# else:
# count_spilt[i] = 1
dc_words[i] += 1
print(dc_words) # 默认字典的赋值为空列表
line = [(1,2),(1,3),(3,6),(4,7),(3,9),(4,9),(5,10)]
# 把相同x的y 追加到列表中
# line_new = {1:[2,3],3:{6,9}}
line_new = {}
for x,y in line:
if x not in line_new:
line_new[x] = [y]
else:
line_new[x].append(y)
print(line_new) # -----------------------
line_dic = defaultdict(list) # 新做法
for x, y in line:
line_dic[x].append(y)
print(line_dic) "3. ChainMap "
# 把两个字典组合起来
d1 = {'debug':1,"louhui":2,"diaosi":3}
d2 = {1: [2, 3], 3: [6, 9], 4: [7, 9], 5: [10]}
chain = ChainMap(d1,d2)
d3 = {'louhui':'shuai', 'caoyu':4, 1:"1"}
chain.update(d3)
print(chain) "4. OrderDict"
# 在python3 字典就是有序的,但是我们不能依赖他,可能会变化
# 传统做法
dict2 = {'': 2,'a': 3,'de8ug': 2,'e': 8,'k': 9,'loves': 2,'much': 3,'so': 3,'you': 3}
keys = dict2.keys()
sorted(keys)
for k in keys:
print(k, dict2['e']) # 使用OrderDict
dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
order_dic = Orderdd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
#按key排序
kd = OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
#按照value排序
vd = OrderedDict(sorted(dd.items(),key=lambda t:t[1])) "5. deque"
# deque - double-end que.双向队列,支持线程安全
de = deque()
de.append(1)
de.append(2)
de.appendleft(3)
print(de) de1 = deque([1,2,3,4,5,6,7], 7)
print(de1)
de1.rotate(3) # 旋转
print(de1) # 另外一个作用,tail类型。输出文件的最后几行
def tail_file(filename, n):
with open(filename, 'r') as f:
return deque(f, n) print(tail_file('/Users/lh/my_learn_python/01-python/123.txt', 2)) "6. nametuple"
# 就是给元祖每个变量定义一个名字
# 三种命名格式
Point = namedtuple('Point', 'm,n')
Point = namedtuple('Point', 'm n')
Point = namedtuple('Point', ['x', 'y']) # Ponit=namedtuple('Point-LH','x,y')
p = Point(1,2)
print(p)
print(p.x)
Python将列表作为栈和队列的更多相关文章
- Python数据结构 将列表作为栈和队列使用
列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop() ...
- Python 如何用列表实现栈和队列?
1.栈结构,其实就是一个后进先出的一个线性表,只能在栈顶压入或弹出元素.用列表表示栈,则向栈中压入元素,可以用列表的append()方法来实现,弹出栈顶元素可以用列表的pop()方法实现. >& ...
- python之单例模式、栈、队列和有序字典
一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...
- Python—使用列表构造栈数据结构
class Stack(object): """ 使用列表实现栈 """ def __init__(self): self.stack = ...
- 14_Python将列表作为栈和队列_Python编程之路
上一篇文章跟大家介绍了列表的一些方法,这一节我们还是讲列表 只是这一节我们要联系一些数据结构,来讲列表 栈 首先我们要理解一下栈是一种什么数据结构 栈(stack)又名堆栈,它是一种运算受限的线性表. ...
- 【LeetCode题解】232_用栈实现队列(Implement-Queue-using-Stacks)
目录 描述 解法一:在一个栈中维持所有元素的出队顺序 思路 入队(push) 出队(pop) 查看队首(peek) 是否为空(empty) Java 实现 Python 实现 解法二:一个栈入,一个栈 ...
- JS数据结构的栈和队列操作
数据结构:列表.栈.队列.链表.字典.散列.图和二叉查找树! 排序算法:冒牌.选择.插入.希尔.归并和快速! 查找算法:顺序查找和二分查找 在平时工作中,对数组的操作很是平常,它提供了很多方法使用,比 ...
- 【391】栈与队列,Python实现
参考:python实现stack(栈)和队列(queue) - hjhmpl123的博客 - CSDN博客 参考:Python3 数据结构 | 菜鸟教程 栈和队列是两种基本的数据结构,同为容器类型.两 ...
- Python实现栈、队列
目录 1. 栈的Python实现 1.1 以列表的形式简单实现栈 1.2 以单链表形式实现栈 2. 队列的Python实现 2.1 以列表实现简单队列 2.2 以单链表形式实现队列 本文将使用py ...
随机推荐
- shell分析http日志
http状态码1字头----信息,服务器收到请求,需要请求者继续执行操作2字头----成功,操作被成功接收并处理3字头----重定向,需要进一步的操作以完成请求4字头----客户端错误,请求包含语法错 ...
- 02: python3使用email和smtplib库发送邮件
1.1 发送qq邮箱 注:python代理登录qq邮箱发邮件,是需要更改自己qq邮箱设置的.在这里大家需要做两件事情:邮箱开启SMTP功能 .获得授权码 教程链接 1.给单个人发邮件 参考 from ...
- Java JDK8 学习笔记 1-3章
第一章 Java平台概论 1.了解Java的前世今生,Java SE.Java EE.JavaME三大平台.其中Java SE主要由四部分JVM.JRE.JDK与Java语言,JDK包含JRE,JRE ...
- Postgresql数据库实用命令
Postgresql 命令 pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start 启动数据库 cr ...
- 在Android studio中到入Eclipse
由于无法在AS中直接导入Eclipse的原始包,所以需要先把Eclipse的包导出成Gradle包,这个Gradle包可以别两个环境识别. 1.在Eclipse中导出Gradle包.选择需要从Ecli ...
- CMD运行后关闭CMD 的窗口命令
在命令前加上Start 例(打开服务管理):start services.msc
- cmd命令分类
1.系统功能类 AT:计划在计算机上运行的命令和程序.ATTRIB:显示或更改文件属性.BREAK:设置或清除扩展式 CTRL+C 检查.CACLS:显示或修改文件的访问控制列表(ACLs).CALL ...
- windows的gvim总是报错: +iconv fencview.vim
iconv是用来转换gvim文件的编码的, 需要插件: iconv.dll gvim7.3的文件目录结构: vim/vim73是它的核心文件, 而vimfiles是扩展文件, 里面的plugin是专门 ...
- Spring报NoSuchBeanDefinitionException
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 上述可以看出Ac ...
- Visual Studio 项目模板制作(三)
前面,我们已经制作好了模板,然后放到相应的Template目录就可以在Visual Studio中使用 本篇,我们采用安装VSIX扩展的方式来安装模板,这种方式需要安装Visual Studio SD ...