(六)Python基礎知識-集合

1、特性

集合(set)是一個無序的不重複的元素序列。
可以使用大括號{}或者set()函數創建集合。
注意:創建一個空集合必須使用set()而不是{},與空字典有區別。

包含的操作如下表:
方法 描述
add (x) 爲集合添加元素
update(x) 爲集合添加元素,x可以爲列表,元組,字典、字符串(會分隔字符串進行添加,如:“張三”,會拆分成“張”、“三”兩個元素進行添加。很高端)
clear() 移除集合中的所有元素
discard(x) 刪除集合中指定的元素,元素不存在,不會報錯
remove(x) 刪除集合中指定的元素,元素不存在,會報錯KeyError
pop() 隨機刪除一個元素
copy() 拷貝一個集合
difference() 返回多個集合的差集
difference_update() 移除集合中的元素,該元素在指定的集合也存在
union() 返回兩個集合並集
intersection() 返回兩個集合的交集,生成新的集合
intersection_update() 兩個集合的交集,集合的交併是在原集合的基礎上進行的,沒有生成新的集合,無返回值
isdisjoint() 判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False。* -切記注意返回值- *
issubset() 判斷指定集合是否爲該方法參數集合的子集。
issuperset() 判斷該方法的參數集合是否爲指定集合的子集
symmetric_difference() 返回兩個集合中不重複的元素集合。
symmetric_difference_update() 移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中。

2、案例

由於案例太多了,就不一一介紹,直接看完整代碼吧,所有方法的調用都包含了,可以直接拷貝運行。

# 聲明一個集合
mySet = set(("張三", "李四", "王五"))  # 方式1
mySet2 = {"張三", "李四", "王五"}  # 方式2
print("mySet集合原始數據:", mySet)
print("mySet2集合原始數據:", mySet2)

# 判斷元素是否存在
isExist = "張三1" in mySet
print("判斷元素是否存在:", isExist)

# 添加元素
mySet.add("老大")
print("添加一個元素:", mySet)

# 添加列表
mySet.update({"張三", "老大", "老二"})
print("添加一個列表:", mySet)

# 添加字符串
mySet.update("老三")
print("添加一個字符串:", mySet)

print("1、最新的mySet集合:", mySet)
print("1、最新的mySet2集合:", mySet2)

# 兩個集合交集
print("兩個集合交集:", mySet.intersection(mySet2))

# 注意無返回的交集,直接更改mySet集合的值,【這個操作請最後運行,不然後面的操作看不到結果】
# mySet.intersection_update(mySet2)
# print("兩個集合交集:",mySet)

# 返回兩個集合中不重複的元素
print("mySet與mySet2不重複的元素:", mySet.symmetric_difference(mySet2))

# 移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中。
# 注意沒有返回值,直接在mySet集合上進行更新操作【這個操作請最後運行,不然後面的操作看不到結果】
# mySet.symmetric_difference_update(mySet2)
# print("mySet與mySet2不重複的元素2:",mySet)

print("2、最新的mySet集合:", mySet)
print("2、最新的mySet2集合:", mySet2)

#  判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False
print("兩個集合是否包含相同的元素:", mySet.isdisjoint(mySet2))
# 判斷指定集合是否爲該方法參數集合的子集
print("mySet是否爲mySet2的子集:", mySet.issubset(mySet2))
# 判斷該方法的參數集合是否爲指定集合的子集
print("mySet2是否爲mySet的子集:", mySet.issuperset(mySet2))

# 返回兩個集合的差集
print("mySet與mySet2的差集:", mySet.difference(mySet2))

# 直接在原來的集合中移除元素,沒有返回值,多的移除少的
mySet.difference_update(mySet2)
print("mySet移除mySet2的差集:", mySet)

print("3、最新的mySet集合:", mySet)
print("3、最新的mySet2集合:", mySet2)
# 兩個集合取並集
print("兩個集合並集:", mySet.union(mySet2))

# 隨機刪除一個元素
mySet.pop()
print("隨機刪除一個元素:", mySet)

# 清空
mySet.clear()
print("清空集合:", mySet)

# 刪除不存在的元素不報錯
mySet.discard("戰三")

# 刪除不存在的元素報錯KeyError
mySet.remove("戰三")

輸出:

mySet集合原始數據: {'王五', '李四', '張三'}
mySet2集合原始數據: {'王五', '李四', '張三'}
判斷元素是否存在: False
添加一個元素: {'王五', '老大', '李四', '張三'}
添加一個列表: {'王五', '李四', '老大', '老二', '張三'}
添加一個字符串: {'王五', '李四', '老大', '老二', '三', '老', '張三'}
1、最新的mySet集合: {'王五', '李四', '老大', '老二', '三', '老', '張三'}
1、最新的mySet2集合: {'王五', '李四', '張三'}
兩個集合交集: {'王五', '李四', '張三'}
mySet與mySet2不重複的元素: {'老大', '老二', '三', '老'}
2、最新的mySet集合: {'王五', '李四', '老大', '老二', '三', '老', '張三'}
2、最新的mySet2集合: {'王五', '李四', '張三'}
兩個集合是否包含相同的元素: False
mySet是否爲mySet2的子集: False
mySet2是否爲mySet的子集: True
mySet與mySet2的差集: {'老二', '三', '老', '老大'}
mySet移除mySet2的差集: {'老大', '老二', '三', '老'}
3、最新的mySet集合: {'老大', '老二', '三', '老'}
3、最新的mySet2集合: {'王五', '李四', '張三'}
兩個集合並集: {'王五', '李四', '老大', '老二', '三', '老', '張三'}
隨機刪除一個元素: {'老二', '三', '老'}
清空集合: set()
Traceback (most recent call last):
  File "E:/pythonWorkplace/venv/TestSet.py", line 80, in <module>
    mySet.remove("戰三")
KeyError: '戰三'

3、總結

mySet.isdisjoint(mySet2) 這個方法一定要注意:
返回值爲True,說明mySet與mySet2集合沒有相同的元素;
返回值爲False,說明mySet與mySet2集合有至少一個以上相同的元素存在。
取交集、差集、不重複的元素集合調用帶有_update()後綴的方法時,往往都是沒有返回值的,而且不會新創建集合,直接在原集合中合併元素。
mySet.update(x)函數調用的時候要注意,當x爲字符串的時候,會將字符串分隔成一個一個的字符,進行元素添加,如:“張三”,會拆分成“張”、“三”兩個元素進行添加。很高端

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章