Python序列相关内容

 

Collections模块

namedtuple

Python元组的升级版本 -- namedtuple(具名元组)

因为元组的局限性:不能为元组内部的数据进行命名,所以往往我们并不知道一个元组所要表达的意义,所以在这里引入了 collections.namedtuple 这个工厂函数,来构造一个带字段名的元组。具名元组的实例和普通元组消耗的内存一样多,因为字段名都被存在对应的类里面。这个类跟普通的对象实例比起来也要小一些,因为 Python 不会用 __dict__ 来存放这些实例的属性。

返回一个具名元组子类 typename,其中参数的意义如下:

  • typename:元组名称
  • field_names: 元组中元素的名称
  • rename: 如果元素名称中含有 python 的关键字,则必须设置为 rename=True
[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from collections import namedtuple
 
User = namedtuple("User", ["name", "gender", "age"])
# 创建一个User对象
user = User(name='Runoob', gender='male', age=12)
 
# 获取所有字段名
print( user._fields )
 
# 也可以通过一个list来创建一个User对象,这里注意需要使用"_make"方法
user = User._make(['Runoob', 'male', 12])
 
print( user )
# User(name='user1', gender='male', age=12)
 
# 获取用户的属性
print( user.name )
print( user.gender )
print( user.age )
 
# 修改对象属性,注意要使用"_replace"方法
user = user._replace(age=22)
print( user )
# User(name='user1', gender='male', age=21)
 
# 将User对象转换成字典,注意要使用"_asdict"
print( user._asdict() )
# OrderedDict([('name', 'Runoob'), ('gender', 'male'), ('age', 22)])


defaultdict

案例导入,统计字符串中每个字符出现的次数

 

[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
<font color="#262626">a = "aabbccd"
 
ret = {}
 
for i in a:
    if i not in ret:
        ret[i] = 1
    else:
        ret[i] += 1
 
print(ret)</font>

 

 

[Python] 纯文本查看 复制代码
?
1
2
3
4
5
6
<i><i><font color="#262626">from collections import defaultdict
ret = defaultdict(int)
for i in a:
    ret[i] += 1
 
print(ret)</font></i></i>

 

 

使用defaultdict任何未定义的key都会默认返回一个根据method_factory参数不同的默认值, 而相同情况下dict()会返回KeyError.

 

[Python] 纯文本查看 复制代码
?
1
2
3
4
<font color="#262626">d1 = dict()
d2 = defaultdict(list)
print(d1['a'])
print(d2['a'])</font>

 

default_factory 接收一个工厂函数作为参数, 例如int str list set等.

 

defaultdict在dict的基础上添加了一个__missing__(key)方法, 在调用一个不存的key的时候, defaultdict会调用__missing__, 返回一个根据default_factory参数的默认值, 所以不会返回Keyerror.

 

deque

deque和list的区别:

  • deque是线程安全的,list不是
  • deque来说从队列两端添加或弹出元素的复杂度都是O(1)。而从列表的头部插入或移除元素时,列表的复杂度为O(N),在实现队列时,deque比list更适合。deque是一个双向链表,所以操作头尾非常简单。随机往中间插入数据,deque与list的时间复杂度都是O(n), 根据index读list,时间复杂度为O(1),deque是O(n)

python的queue就是基于deque实现的

 

deque中的特有的方法

 

[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
<font color="#262626">from collections import namedtuple, deque
b_deque = deque([1, 231, 45, 641])
b_deque.appendleft(0)
b_deque.extendleft([5,6,7])
print(b_deque.popleft())
print(b_deque)
 
 
# 限制deque的长度
c_deque = deque([1, 2, 3, 4], maxlen=4)
c_deque.append(5) # 此时会在末尾加入5,同时删除最前面的1。</font>

 

Counter(计数器)

[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
a = Counter("sdfdsgfdgfj")
print(a)
print(list(a.elements()))
# 列出前n个元素
print(a.most_common(2))
print(a.items())
 
# 增加元素
b = Counter([11,22])
print(b)
b.update([11,22])
print(b)
 
# 减去元素
b.subtract([11])
print(b)




OrderedDict(有序字典)

Python3.6之后默认的字典就是有序字典,但是OrderedDict有几个好用的方法是普通字典没有的

 

[Python] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
9
<font color="#262626">dic = OrderedDict()[/color][/p]
dic["b"] = 456
dic["c"] = 123
dic["a"] = 789
print(dic)
dic.move_to_end("c")
print(dic)
print(dic.popitem())
print(dic)</font>


ChainMap

我们有多个字典或者映射,想把它们合并成为一个单独的映射,有人说可以用update进行合并,这样做的问题就是新建了一个数据结构以致于当我们对原来的字典进行更改的时候不会同步。如果想建立一个同步的查询方法,可以使用ChainMap

ChainMap最基本的使用,可以用来合并两个或者更多个字典,当查询的时候,从前往后依次查询。

有一个注意点就是当对ChainMap进行修改的时候总是只会对第一个字典进行修改


 

[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
a = {"a": 123, "b": 456}
# b = {"a": 789, "b": 101}
b = {"c": 123, "d": 456}
chain_map = ChainMap(a, b)
 
# for k, v in chain_map.items():
#     print(k, v)
 
# new_child 在开头创建一个新的空字典
c = chain_map.new_child()
c["m"] = 000
print(c)
 
# parents去掉第一个字典
print(c.parents)
 
for k, v in chain_map.items():
    print(k, v)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值