天天看點

Cp4_3_1

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : Cp4_3_1.py
# @Author: WRH
# @Date  : 2021/3/24
# @Edition:Python3.8.6

# 集合(set)
'''
集合(set)是不重複元素的無序集。
集合有類似字典的特點:
1.花括号“{}”來定義
2.集合中的元素是非序列類型的資料,也就是沒有順序,是以不支援索引、切片或其他類序列(sequence-like)的操作
3.集合中的元素不可重複,如有重複元素,将隻保留一個
4.集合是可以修改的資料類型,但其中的元素必須是不變對象(字元、數字、元組),類似于字典中的鍵。
'''

# 1.集合的建立

# 使用{}指派建立
# 例4-15 集合建立舉例
s1 = {1, 2, 3, 4, 5}
print(s1)
s2 = {'a', 'b', 'c', 'c'}
print(s2) # 集合中的元素不可重複,如有重複元素,将隻保留一個
s3= {'Python', (1, 2, 3)}
print(s3)
# 集合中的必須是不變對象(字元、數字、元組),通過{}無法建立含有清單或字典元素的集合
#s4 = {"Python", [1, 2, 3]}
#s5 = {"Python", {'name': 'alice'}}
#print(s4, s5)

# 使用set()方法建立
# 建立空集合
s1= set() # 注意建立空集合要用set()而非{},若用{},将建立空字典
print(s1)
print(type(s1))
s2 = {}
print(type(s2))
# 由字元串建立
s3 = set('helloPython')  # 'helloPython'中包含兩個'l'、兩個'o'和兩個'h',
print(s3) # 在s3中,'i'、'o'和'h'分别隻有一個,即集合建立時自動保留重複字元中的一個。
# 由清單或元組建立
s4 = set([1, 'name', 2, 'age', 'hobby'])
print(s4)
s5 = set((1, 2, 3))
print(s5)

# 2.集合的修改
'''
集合對象的方法	        含義
set.add(x)	        向集合中添加元素x
set.update(a_set)	使用集合a_set更新原集合
set.pop()           删除并傳回集合中的任意元素
set.remove(x)	    刪除集合中的元素x,如果x不存在則報錯
set.discard(x)	    删除集合中的元素x,如果x不存在則什麼也不做
set.clear()         清空集合中的所有元素
'''
a_set = {1, 2}
b_set = {'sisu'}
# 添加元素
a_set.add('python')
print(a_set)
# 添加集合
a_set.update(b_set)
print(a_set)
# 删除并傳回集合中任意元素
a_set.pop()
print(a_set.pop())
print(a_set)
#print(a_set.pop('sisu')) # 不可指定要删除的元素
# 删除集合中指定的元素
a_set.remove('sisu')
print(a_set)
#a_set.remove('a') # 如果要删除的元素不存在,會報錯
a_set.discard('a') # 如果要删除的元素不存在,不進行任何操作
print(a_set)
# 清空集合中所有元素
a_set.clear()
print(a_set)

# 3.集合的數學運算
'''
Python符号	集合對象的方法	                含 義
s1 & s2	    s1.intersection(s2)	        傳回s1與s2的交集,即s1和s2都有的元素
s1 | s2	    s1.union(s2)	            傳回s1與s2的并集,即s1和s2所有元素,相同元素隻保留一個
s1 - s2	    s1.difference(s2)	        傳回s1與s2的差集,即s1獨有的元素
s1 ^ s2	    s1.symmetric_difference(s2)	傳回s1與s2的對稱差,即s1和s2各自獨有元素的合集
x in s1	                                測試x是否是s1的成員
x not in s1		                        測試x是否不是s1的成員
s1 <= s2	s1.issubset(s2)	            測試是否s1是s2的子集
s1 >= s2	s1.issuperset(s2)	        測試是否s1是s2的超集
            s1.isdisjoint(s2)	        測試s1和s2是否有交集,如果沒有傳回 True,否則傳回 False。
s1|= s2	    s1.update(s2)	            用s2更新s1,添加s2中的元素到s1中,如果添加的元素在s1中已存在,則該元素隻會出現一次
'''
# 例4-16 集合運算舉例。
s1 = {'a', 'e', 'i', 'o', 'u'}
s2 = {'a', 'e', 'c', 'd', 'b'}
print(s1)
print(s2)
print(s1 & s2) # 交集:s1和s2都有的元素,也可以使用方法輸出,print(s1.intersection(s2))
print(s1 | s2) # 并集:s1和s2所有元素,也可以使用方法輸出,print(s1.union(s2))
print(s1 - s2) # 差集:s1獨有的元素,也可以使用方法輸出,print(s1.difference(s2))
print(s1 ^ s2) # 對稱差集:s1和s2各自獨有元素的合集,也可以使用方法輸出,print(s1.symmetric_difference(s2))
print('a' in s1)
print('a' not in s1)
print(s1 <= s2) # 測試s1是否是s2的子集,也可以使用方法輸出,print(s1.issubset(s2))
print(s1 >= s2) # 測試s1是否是s2的超集,也可以使用方法輸出,print(s1.issuperset(s2))
print(s1.isdisjoint(s2)) # 測試s1和s2是否有交集,如果沒有傳回 True,否則傳回 False。
s1.update(s2) # 添加s2中的元素到s1中,如果添加的元素在s1中已存在,則該元素隻會出現一次
print(s1)

# frozenset()方法建立不可修改的集合
# 由于集合中的元素隻能是不可變資料類型,是以集合中不能有集合,但是frozenset()方法建立不可變的集合
# 例如:
f_set = {frozenset({1, 2, 3}), 'a'}
print(f_set)
f_dict = {frozenset({1, 2, 3}): 'frozenset', 'python': 3.8}
print(f_dict)
           
上一篇: Cp2_3_1.py
下一篇: cp9_1_2.py