惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
S
SegmentFault 最新的问题
Jina AI
Jina AI
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
B
Blog
博客园 - 【当耐特】
博客园 - Franky
M
MIT News - Artificial intelligence
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Engineering at Meta
Engineering at Meta

Posts on WKLKEN THINKING

apisix 中的 lrucache apisix 中的服务发现机制 apisix 中的负载均衡 apisix etcd机制 聊聊框架 关于 k8s 的 zero downtime deployment 一些建议 apisix 遇到的一些问题 关于在除夕前一天换了一个洗衣机的故事 Django DRF 性能优化 DRF 的一些实践 Part1: Serializer DRF继承关系图 Better Code: 关于接口的灵活性 新的仓库: wklken/naming 缓存使用的一些经验 Better Code: 抽象: 可扩展性与可维护性的抉择 Better Code: 异常时, 该提示用户哪些信息? Better Code: 更好的异常日志打印 Go: some libs Go: go-redis/cache升级的坑 Go: logrus性能提升 Go: gin validation 远程办公的一点总结 Go: 开发过程中的一些bug 项目管理实践: 风险驱动开发 Go: 一种error wrap调用链处理方式 漫谈技术选型 Go: 基于 apitest 做handler层单元测试 Go: go-sql-driver interpolateparams参数优化 [分享]深度工作 你需要更多的思考时间
Python-基础-集合小结
2013-03-10 · via Posts on WKLKEN THINKING

##集合

###简介 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素.

sets 支持 x in set, len(set), 和 for x in set。

集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

作为一个无序的集合,sets 不记录元素位置或者插入点。因此,sets 不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

set为可变集合

frozenset为固定集合

可变集合特有的方法: add, remove, discard, pop, clear, 这些接受对象的方法, 参数必须是可哈希的

###声明

用集合的工厂方法 set()和 frozenset():

set

>>> s = set('cheeseshop')
>>> s
set(['c', 'e', 'h', 'o', 'p', 's'])

frozenset

>>> b = frozenset([1,2,3,2])
>>> b
frozenset([1, 2, 3])
>>> b.add(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'

Set 和 ImmutableSet

字符串->字符集

>>> set('hello')
set(['h', 'e', 'l', 'o'])

列表/元组->集合

>>> set([1,2,3,2,1])
set([1, 2, 3])
>>> set((1,2,3,2,1))
set([1, 2, 3])

甚至是 字典->集合

>>> a = {'name':'tom','age':22,'score':22}
>>> set(a)
set(['age', 'score', 'name'])

###常用操作

####成员关系

>>> h = set('hello')
>>> h
set(['h', 'e', 'l', 'o'])
>>> 'l' in h
True
>>> 'l' not in h
False

####新增删除 新增单个元素 s.add(x)

向 set “s”中增加元素 x

>>> a = set([1,2,3,4,2])
>>> a
set([1, 2, 3, 4])
>>> a.add(2)
>>> a
set([1, 2, 3, 4])
>>> a.add(5)
>>> a
set([1, 2, 3, 4, 5])

新增多个元素

s.update(t)

s |= t

>>> a = set([1,2,3])
>>> b = set([2,3,4])
>>> a.update(b)
>>> a
set([1, 2, 3, 4])
>>> b
set([2, 3, 4])

删除

s.remove(x)

从 set “s”中删除元素 x, 如果不存在则引发 KeyError

>>> a
set([1, 2, 3, 4, 5])
>>> a.remove(4)
>>> a
set([1, 2, 3, 5])
>>> a.remove(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 4

s.discard(x)

如果在 set “s”中存在元素 x, 则删除

>>> a
set([1, 2, 3, 5])
>>> a.discard(3)
>>> a
set([1, 2, 5])
>>> a.discard(3)
>>> a
set([1, 2, 5])

s.pop()

删除并且返回 set “s”中的一个不确定的元素, 如果为空则引发 KeyError

>>> a
set([1, 5])
>>> a.pop()
1
>>> a.pop()
5
>>> a.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'

s.clear()

删除 set “s”中的所有元素

>>> a
set([1, 2, 3, 4])
>>> a.clear()
>>> a
set([])

>>> b = set([1,2,3])
>>> del b

####集合间操作 注意,集合操作可以通过函数进行,也存在等价的运算符

1.交集

s.union(t) 等价 s | t

返回一个新的 set 包含 s 和 t 中的每一个元素

2.并集

s.intersection(t) 等价 s & t

返回一个新的 set 包含 s 和 t 中的公共元素

3.差集

s.difference(t) 等价 s - t

返回一个新的 set 包含 s 中有但是 t 中没有的元素

4.差分集

s.symmetric_difference(t) 等价 s ^ t

返回一个新的 set 包含 s 和 t 中不重复的元素

>>> a = set([1,2,3])
>>> b = set([2,3,4])
>>> a.symmetric_difference(b)
set([1, 4])

5.关系判断

s.issubset(t) 等价 s <= t

测试是否 s 中的每一个元素都在 t 中

s.issuperset(t) 等价 s >= t

测试是否 t 中的每一个元素都在 s 中

6.浅拷贝

>>> a
set([1, 2, 3])
>>> b = a.copy()
>>> b
set([1, 2, 3])

###其他 1.用的较少的函数

s.intersection_update(t) 等价 s &= t

返回只保留含有 set “t”中元素的 set “s”

s.difference_update(t) 等价 s -= t

返回删除了 set “t”中含有的元素后的 set “s”

s.symmetric_difference_update(t) 等价 s ^= t

返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”

补充

集合推导(2013-08-13)

>>> { x for x in range(10) }
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

The end!

To be continue

wklken

Email: wklken@yeah.net

Blog: http://blog.csdn.net/wklken

2013-03-10

转载请注明出处,谢谢