首页 > 编程语言 >python3常用库之collections集合库

python3常用库之collections集合库

时间:2024-10-09 16:23:37浏览次数:1  
标签:blue Counter list print collections python3 集合 red

namedtuple

# namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。
# 用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用
Coord = collections.namedtuple("Coord", ["x", "y"])
p = Coord(1, 2)
print(p.x, p.y)  # 1 2
print(isinstance(p, Coord), isinstance(p, tuple))  # True True

deque

# deque 是为了高效实现插入和删除操作的双向列表,适合用于队列和栈
q = collections.deque(["a", "b", "c"], maxlen=10)
q.append("x")
q.appendleft("y")
print(type(q))  # <class 'collections.deque'>
print(list(q))  # ['y', 'a', 'b', 'c', 'x']
q.pop()
q.popleft()
print(list(q))  # ['a', 'b', 'c']
qc = q.copy()  # 浅拷贝
print(list(qc))  # ['a', 'b', 'c']
q.extend(["d", "e"])
q.extendleft(["0"])
q.insert(1, "1")
print(q.index("d"))  # 5
print(q.count("d"))  # 1
q.remove("d")
print(list(q))  # ['0', '1', 'a', 'b', 'c', 'e']
q.rotate()  # 向右循环移动1个元素
print(list(q))  # ['e', '0', '1', 'a', 'b', 'c']
q.rotate(3)  # 向右循环移动n个元素
print(list(q))  # ['a', 'b', 'c', 'e', '0', '1']
q.reverse()
print(list(q))  # ['1', '0', 'e', 'c', 'b', 'a']
q.clear()
print(list(q))  # []

defaultdict

# defaultdict key不存在时,返回一个默认值,其它行为和dict完全一致
dd = collections.defaultdict(lambda: "NA")
print(type(dd))  # <class 'collections.defaultdict'>
dd["a"] = 1
print(dd["a"], dd["b"])  # 1 NA

dd = collections.defaultdict(list)
dd2 = collections.defaultdict(int)
colors = [("yellow", 1), ("blue", 2), ("yellow", 3), ("blue", 4), ("red", 1)]

for k, v in colors:
    dd[k].append(v)
    dd2[k] += 1

print(dict(dd))  # {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}
print(dict(dd2))  # {'yellow': 2, 'blue': 2, 'red': 1}

ChainMap

# ChainMap 可以把一组dict串起来并组成一个逻辑上的dict。查找的时候,会按照顺序在内部的dict依次查找。
combined = collections.ChainMap({"a": 1}, {"a": 2, "b": 2}, {"c": 3})
print(combined["a"], combined["b"], combined["c"])  # 1 2 3

Counter

# Counter 计数
c = collections.Counter({"a": 2, "b": 3, "c": 1})
print(c)  # Counter({'b': 3, 'a': 2, 'c': 1})
c = collections.Counter(a=2, b=3, c=1)
print(c)  # Counter({'b': 3, 'a': 2, 'c': 1})

c = collections.Counter()
for i in "acdffdaaaddccc":
    c[i] += 1
print(c)  # Counter({'a': 4, 'c': 4, 'd': 4, 'f': 2})
print(isinstance(c, dict))  # True

c2 = collections.Counter("acdffdaaaddccc")
c2.update("acc")
print(c2)  # Counter({'c': 6, 'a': 5, 'd': 4, 'f': 2})

c3 = collections.Counter(["red", "blue", "red", "green", "blue", "blue"])
print(dict(c3))  # {'red': 2, 'blue': 3, 'green': 1}

print(list(c3.elements()))  # ['red', 'red', 'blue', 'blue', 'blue', 'green']
print(sorted(c3.elements()))  # ['blue', 'blue', 'blue', 'green', 'red', 'red']
print(c3.most_common(2))  # [('blue', 3), ('red', 2)]  返回前n个最多的数据
print(dict(c2 - c))  # {'a': 1, 'c': 2}
print(dict(c2 + c))  # {'a': 9, 'c': 10, 'd': 8, 'f': 4}

 

标签:blue,Counter,list,print,collections,python3,集合,red
From: https://www.cnblogs.com/caroline2016/p/18454532

相关文章

  • python3常用库之datetime库
    日期时间fromdatetimeimportdatetime,timedelta,timezonenow=datetime.now()print(now)#2024-02-0214:27:12.247121dt=datetime(2023,12,31,12,30,00)print(dt)#2023-12-3112:30:00#时间戳,和时区无关ts=dt.timestamp()print(ts)#17039970......
  • python3常用库之解析命令行参数argparse
    在命令行程序中需要获取命令行参数可以使用sys库和argparse库。sys库可用于处理简单的命令行参数,argparse库可用于处理复杂的命令行参数。#argparse解析命令行参数importargparse,sysdefmain():#定义一个ArgumentParser实例:参数分别为程序名、描述、说明信息......
  • python3常用库之Base64编码
    Base64是一种用64个字符来表示任意二进制数据的方法。importbase64by="abc中文".encode()b=base64.b64encode(by)print(by)#b'abc\xe4\xb8\xad\xe6\x96\x87'print(b)#b'YWJj5Lit5paH'by2=base64.b64decode(b)print(by2)#b'abc\xe......
  • 每日学学Java开发规范,集合处理(附阿里巴巴Java开发手册(终极版))
    前言每次去不同的公司,码不同的代码,适应不同的规范,经常被老大教育规范问题,我都有点走火入魔的感觉,还是要去看看阿里巴巴Java开发规范,从中熟悉一下,纠正自己,码出高效,码出质量。想细看的可以去官网下载,或者下面自取阿里巴巴Java开发手册(终极版)五、集合处理【强制】关于ha......
  • 集合论(ZFC)之 序数与良序同构(isomorphic)
            在论证序数(Ordinals)与良序集(WellOrderedSets)同构(isomorphic)前,需要引入一些新的概念,以便后续的论证。一、集合类(Class)    为了方便描述多个集合组成的结构(acollectionofset),同时又为了避免集合的集合产生的逻辑上的冲突,因此,引入了一个类似于集合(S......
  • 如何提高 Java Stream 遍历集合效率
    在Java8之前,对于大数据量的集合,传统的遍历方式主要是通过for循环或者Iterator迭代。然而,这种方式在处理大数据量集合时效率并不理想。以电商系统中的订单表为例,通常使用用户ID的Hash值来实现分表分库,以减少单个表的数据量,提高用户查询订单的速度。但当后台管理员审核订......
  • 集合竞价如何看强弱?
    买股票前先把集合竞价搞懂一、集合竞价介绍1. 什么是集合竞价所谓集合竞价是指在股票每个交易日上午9:15—9:25,由投资者按照自己所能接受的心理价格自由地进行买卖申请。详情可参考下图:注:严谨的集合竞价时间为9:15-9:25,下文在聊到集合竞价时候我会把9:25-9:30时间段也一并分析......
  • 10.Java集合框架_List接口
    集合与数组的区别数组:长度开始时必须指定,而且一旦指定,不能修改。保存的必须为同一类型的元素。使用数组进行增加/删除元素比较麻烦。集合:可以动态保存任意多个对象,使用比较方便。提供了一系列方便操作对象的方法:add、remove、set、get。使用集合添加,删除新元素的代......
  • 数据容器之集合(笔记)
    集合的特点不支持重复元素(去重)而且顺序不能保证(乱序,无下标索引)允许被修改小总结列表[]元祖()字符串""集合{}语法#语法{"sasa","kaka","papa","enen"}#字面量set_1={"sasa","kaka","papa","enen"}#用......
  • python3 队列的使用
    在leetcode如下题目中使用队列637.二叉树的层平均值:#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolutio......