python集合输出_Python之集合

集合:无序的,不可随机访问的,不可重复的元素集合

# 可以使用大括号 { } 或者 set() 函数创建集合,

# 注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

# 集合可分为可变集合和不可变集合

# 可变集合:有增、删、改的操作 set

# 不可变集合:创建好以后,无法进行增、删、改的操作 frozenset

# 可变集合定义

1 s = {1, 2, 3}2 print(s, type(s))3

4

5 #set(iterable)

6

7 #s = set("abc")

8 #s = set([1, 2, 3])

9 #s = set({1, 2, 3})

10 s = set({"name": "xq", "age": 18})11 print(s, type(s))

输出结果:

{1, 2, 3}

{'age', 'name'}

# 集合推导式

1 s = set(x**2 for x in range(1, 10) if x % 2 ==0)2 #或者s = {x**2 for x in range(1, 10) if x % 2 == 0} 这样写也是可以的

3 print(s, type(s))

输出结果:

{16, 64, 4, 36}

# 不可变集合的定义

# fs = frozenset(iterable) iterable:可迭代对象

1 #fs = frozenset("abcd")

2 #fs = frozenset([1, 2, 3])

3 fs = frozenset((1, 2, 3))4 #s = frozenset({"name": "xq", "age": 18})

5 print(fs, type(fs))

输出结果:

frozenset({1, 2, 3})

# 集合推导式

#fs = frozenset(...)

1 fs = frozenset(x for x in range(1, 10))2 print(fs, type(fs))

输出结果:

frozenset({1, 2, 3, 4, 5, 6, 7, 8, 9})

# 集合的常用操作

# 单一集合的操作

# 可变集合的操作:增、删、查 不可改:因为元素都是不可变类型,不可修改,而且也无法通过索引或者key进行查询

# 不可变集合:不可增、删、改。可以查询。1)通过for in进行访问 2)通过迭代器进行访问

# 1)添加元素

# s.add( x )

# 将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。

1 s = set({"Google", "Baidu"})2 s.add("FaceBook")3 print(s, type(s))

输出结果:

{'Google', 'Baidu', 'FaceBook'}

# 2)移除元素

# s.remove( x )

# 将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。

1 s = {"Google", "Baidu", "FaceBook"}2 s.remove("Baidu")3 print("移除元素后的集合为::", s)

输出结果:

移除元素后的集合为::  {'Google', 'FaceBook'}

# s.remove("Taobao")

# 如果元素不存在则报以下的错误

'''

Traceback (most recent call last):

File "G:/PythonProject/DemoTest01/css/004/Set/SetFunction.py", line 65, in

s.remove("Taobao")

KeyError: 'Taobao'

'''

# 此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:

# s.discard( x )

1 s = {1, 2, 3, 4}2 s.discard(2)3 print("移除元素2之后的集合为::", s)4

5 s.discard(5)6 #不存在不会发生错误

输出结果:

移除元素2之后的集合为::  {1, 3, 4}

# 我们也可以设置随机删除集合中的一个元素,语法格式如下:

# s.pop()

# 若集合为空,则会返回一个错误

1 s = {"name", "age", "sex"}2 result =s.pop()3 print("result::", result, "\t s::", s)

输出结果:result::  age s::  {'name', 'sex'}

# 清空集合

# s.clear()

1 s = {"Google", "Baidu", "Taobao"}2 s.clear()3 print("清空集合后::", s)

输出结果:清空集合后::  set()

# 3)查询操作

# for in 操作

1 s = {1, 2, 3}2 for v ins:3 print(v)

输出结果:

1

2

3

# 使用迭代器

1 s = {"name", "age", "sex"}2 its =iter(s)3 whileTrue:4 try:5 x =next(its)6 print(x)7 exceptStopIteration:8 break

输出结果:

age

name

sex

# 不可变集合和可变集合的查询操作几乎是一样的

1 s = frozenset([1, 2, 3])2 print(s, type(s))3 for v ins:4 print(v)5

6 its =iter(s)7 for x inits:8 print(x)

输出结果:

frozenset({1, 2, 3})

1

2

3

1

2

3

# 集合之间的操作

# 交集、并集、差集和判定的操作

# 1)交集

# intersection(interable)

# 字符串 (只判定字符串中的非数字)

# 列表

# 元组

# 字典 值判定key

# 集合

1 s1 = {1, 2, 3, 4, 5}2 s2 = {4, 5, 6}3 result =s1.intersection(s2)4 print(result, type(result))

输出结果:{4, 5}

# 可变集合与不可变集合混合运算的时候,返回结果类型以运算符左侧为准

1 s1 = frozenset([1, 2, 3, 4, 7])2 s2 = {4, 5, 6, 7}3 result =s1.intersection(s2)4 print(result, type(result))5

6 ret =s2.intersection(s1)7 print(ret, type(ret))

输出结果:

frozenset({4, 7})

{4, 7}

# 也可以使用逻辑"&"求出交集

1 s1 = frozenset([1, 2, 3, 4, 7])2 s2 = {4, 5, 6, 7}3 result = s1 &s24 print(result, type(result))5 print(s1, s2)

输出结果:

frozenset({4, 7})

frozenset({1, 2, 3, 4, 7}) {4, 5, 6, 7}

# intersection_update(...)

# 也是计算两个集合之间的交集,但是,交集计算完毕以后,会再次赋值给原对象

# 会更改原对象,所以只适用于可变集合

1 s1 = frozenset([1, 2, 3, 4, 7])2 s2 = {4, 5, 6, 7}3 #result = s1.intersection_update(s2) 这样写是错误的,因为s1是不可变集合

4 result =s2.intersection_update(s1)5 print(result, type(result))6 print(s1, s2)

输出结果:

None

frozenset({1, 2, 3, 4, 7}) {4, 7}

# 集合的并集操作

# union 返回并集

# 逻辑 "|" 返回并集

# update 更新并集

1 s1 = {1, 2, 3}2 s2 = {3, 4, 5}3

4 result =s1.union(s2)5 print(result, s1)6 #使用 "|"

7 result1 = s1 |s28 print(result1, s1)

输出结果:

{1, 2, 3, 4, 5} {1, 2, 3}

{1, 2, 3, 4, 5} {1, 2, 3}

# 如果把s1更改为不可变集合

1 s1 = frozenset([1, 2, 3])2 s2 = {3, 4, 5}3

4 result2 =s1.union(s2)5 print(result2, s1)

输出结果:

frozenset({1, 2, 3, 4, 5}) frozenset({1, 2, 3})

# 更新并集

1 s1 = {1, 2, 3}2 s2 = {3, 4, 5}3

4 result =s1.update(s2)5 print(result, s1)

输出结果:None {1, 2, 3, 4, 5}

# 集合的差集操作

# difference()

# 逻辑运算符 "-"

# difference_update()

1 s1 = {1, 2, 3}2 s2 = {3, 4, 5}3

4 result =s1.difference(s2)5 print(result, s1)6

7 #逻辑运算符"-"

8 result2 = s1 -s29 print(result2, s1)10

11 #更新差集

12 s1 = {1, 2, 3}13 s2 = {3, 4, 5}14

15 result =s1.difference_update(s2)16 print(result, s1)

输出结果:

{1, 2} {1, 2, 3}

{1, 2} {1, 2, 3}

None {1, 2}

# 集合的判定操作

# isdisjoint() 两个集合不相交

# issuperset() 一个集合包含另一个集合

# issubset() 一个集合包含于另一个集合

1 s1 = {1, 2, 3}2 s2 = {3, 4, 5}3 print(s1.isdisjoint(s2))4

5 s1 = {1, 2}6 s2 = {3, 4, 5}7 print(s1.isdisjoint(s2))8

9

10 s1 = {1, 2, 3, 4}11 s2 = {3, 4, 5}12 print(s1.issuperset(s2))13

14 s1 = {1, 2, 3, 4, 5}15 s2 = {3, 4, 5}16 print(s1.issuperset(s2))17

18

19 print(s2.issubset(s1))

输出结果:

False

True

False

True

True

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值