學(xué)習(xí)筆記20170601">【PMP】學(xué)習(xí)筆記20170601
920
2022-05-29
'''
Python3集合
集合(set)是一個無序的、不重復(fù)的元素序列。
可以使用大括號?{} 或者?set() 函數(shù)創(chuàng)建集合。
注意:創(chuàng)建一個空集合必須使用?set() 而非?{},因為?{} 是用來創(chuàng)建一個空字典。
格式:
parameter = {value1, value2, ...}
或者
set(value)
'''
集合(set)是一個無序的、不重的復(fù)元素序列。
可以使用大括號?{}?或者??set()??函數(shù)創(chuàng)建集合,
注意:創(chuàng)建一個空集合必須用?set()??而不是?{}?,因為??{}?是用來創(chuàng)建一個空字典。
創(chuàng)建格式:
parameter?=?{value01,value02,...}
或者
set(value)
類似列表推導(dǎo)式,同樣集合支持集合推導(dǎo)式(Set comprehension):
實例(Python 3.0+)
>>>?a?=?{x?for?x?in?'abracadabra'?if?x?not?in?'abc'}
>>>?a
{'r',?'d'}
集合的基本操作
1、添加元素
語法格式如下:
s.add(?x )
將元素 x 添加到集合 s 中,如果元素已存在,則不進行任何操作。
實例(Python 3.0+)
>>>?thisset?=?set(("Google",?"Runoob",?"Taobao"))
# 若以上提示Function call can be replaced with set literal
# 替換為{'Google', 'Runoob', 'Taobao'}即可
>>>?thisset.add("Facebook")
>>>?print(thisset)
{'Taobao',?'Facebook',?'Google',?'Runoob'}
還有一個方法,也可以添加元素,且參數(shù)可以是列表,元組,字典等,語法格式如下:
s.update(?x )
x 可以有多個,用逗號分開。
實例(Python 3.0+)
>>>?thisset?=?set(("Google",?"Runoob",?"Taobao"))
>>>?thisset.update({1,3})
>>>?print(thisset)
{1,?3,?'Google',?'Taobao',?'Runoob'}
>>>?thisset.update([1,4],[5,6])
>>>?print(thisset)
{1,?3,?4,?5,?6,?'Google',?'Taobao',?'Runoob'}
>>>
2、移除元素
語法格式如下:
s.remove(?x )
將元素 x 從集合 s 中移除,如果元素不存在,則會發(fā)生錯誤。
實例(Python 3.0+)
>>>?thisset?=?set(("Google",?"Runoob",?"Taobao"))
>>>?thisset.remove("Taobao")
>>>?print(thisset)
{'Google',?'Runoob'}
>>>?thisset.remove("Facebook")???# 不存在會發(fā)生錯誤
Traceback?(most recent call last):
File?"
KeyError:?'Facebook'
>>>
此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發(fā)生錯誤。格式如下所示:
s.discard(?x )
實例(Python 3.0+)
>>>?thisset?=?set(("Google",?"Runoob",?"Taobao"))
>>>?thisset.discard("Facebook")??# 不存在不會發(fā)生錯誤
>>>?print(thisset)
{'Taobao',?'Google',?'Runoob'}
我們也可以設(shè)置隨機刪除集合中的一個元素,語法格式如下:
s.pop()
腳本模式實例(Python 3.0+)
thisset?=?set(("Google",?"Runoob",?"Taobao",?"Facebook"))
x?=?thisset.pop()
print(x)
輸出結(jié)果:
$ python3 test.py
Runoob
多次執(zhí)行測試結(jié)果都不一樣。
注意:set 集合的 pop 方法會對集合進行無序的排列,然后將這個無序排列集合的左面第一個元素進行刪除。
3、計算集合元素個數(shù)
語法格式如下:
len(s)
計算集合 s 元素個數(shù)。
實例(Python 3.0+)
>>>?thisset?=?set(("Google",?"Runoob",?"Taobao"))
>>>?len(thisset)
3
4、清空集合
語法格式如下:
s.clear()
清空集合 s。
實例(Python 3.0+)
>>>?thisset?=?set(("Google",?"Runoob",?"Taobao"))
>>>?thisset.clear()
>>>?print(thisset)
set()
5、判斷元素是否在集合中存在
語法格式如下:
x in?s
判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
實例(Python 3.0+)
>>>?thisset?=?set(("Google",?"Runoob",?"Taobao"))
>>>?"Runoob"?in?thisset
True
>>>?"Facebook"?in?thisset
False
>>>
集合內(nèi)置方法完整列表
序號
方法及描述
1
set.add(elemnt)
為集合添加元素
2
set.clear()
移除集合中的所有元素
3
set.copy()
拷貝一個集合
4
set.difference(set)
返回多個集合的差集(-)
5
set.difference_update(set)
移除集合中的元素,該元素在指定的集合也存在。差集
6
set.discard(value)
刪除集合中指定的元素,移除不存在的元素時不會報錯。
7
set.intersection(set1, set2...)
返回集合的交集(&)
8
set.intersection_update(set1, set2...)
返回集合的交集。
9
set.isdisjoint(set)
判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False。
10
set.issubset(set)
判斷指定集合是否為該方法參數(shù)集合的子集。
11
set.issuperset(set)
判斷該方法的參數(shù)集合是否為指定集合的子集
12
set.pop()
隨機移除元素
13
set.remove(item)
移除指定元素,移除不存在的元素時會報錯。
14
set.symmetric_difference(set)
返回兩個集合中不重復(fù)的元素集合?對稱差集(^)
15
set.symmetric_difference_update(set)
移除當(dāng)前集合中在另外一個指定集合相同的元素,并將另外一個指定集合中不同的元素插入到當(dāng)前集合中。對稱差集
16
set.union(set1, set2...)
返回兩個集合的并集(|)
17
set.update(set)
給集合添加元素
python 字符串操作方法詳解
https://www.cnblogs.com/wj-1314/p/8419009.html
python 列表操作方法詳解
https://www.cnblogs.com/wj-1314/p/8433116.html
python 字典操作方法詳解
https://www.cnblogs.com/wj-1314/p/8421724.html
python 集合操作方法詳解
https://www.cnblogs.com/wj-1314/p/8423273.html
#?3、計算集合元素個數(shù):
# len(s):計算集合s元素個數(shù)
set_f = {'Google', 'Runoob', 'Taobao'}
print(len(set_f))
# 4、清空集合
# s.clear():清空集合s
set_g = {'Google', 'Runoob', 'Taobao'}
print(set_g.clear()) ???# 打印結(jié)果:None
# 5、判斷元素是否在集合中
# x in s:判斷元素x是否在集合s中,存在返回True,不存在返回False
set_h = {'Google', 'Runoob', 'Taobao'}
print('Google' in set_h)
'''集合內(nèi)置方法完整列表示例'''
# 1、add():
'''
描述:
add()方法用于給集合添加元素,如果添加的元素在集合中,則不進行任何操作。
語法:
set.add(elmnt)
參數(shù):
elmnt--必須,要添加的元素
返回值:
無
'''
fruit = {'apple', 'orange', 'peach'}
fruit.add('watermelon')
print(fruit)
fruit.add('apple') ?????# 元素已存在,不執(zhí)行任何操作
print(fruit)
fruit.add(('grape')) ???# add()支持元組,不支持列表、字典
print(fruit)
# 2、clear():
'''
描述:
clear()方法用于移除集合中的所有元素
語法:
set.clear()
參數(shù):
無
返回值:
無
'''
fruit = {'apple', 'orange', 'peach'}
fruit.clear()
print(fruit) ???????# 輸出結(jié)果為:set()
# 3、copy():
'''
描述:
copy()方法用于拷貝一個集合
語法:
set.copy()
參數(shù):
無
返回值:
無
'''
fruits = {'apple', 'banana', 'cherry'}
x = fruits.copy()
print(id(fruits), fruits)
# 2441491078720 {'banana', 'cherry', 'apple'} ??地址不一樣,內(nèi)容一樣
print(id(x), x)
# 2441491078496 {'banana', 'cherry', 'apple'} ??地址不一樣,內(nèi)容一樣
# 4、difference():差集(-)
'''
描述:
difference()方法用于返回集合的差集,
即返回一個新集合,元素在x集合而不在y集合。
語法:
set.difference(set)
參數(shù):
set--必須,用于計算差集的集合
返回值:
返回一個新的集合
'''
# set.difference(set):返回多個集合的差集,返回一個新集合,元素在x集合而不在y集合
x = {'apple', 'orange', 'peach'}
y = {'watermelon', 'grape', 'peach'}
z = x.difference(y)
print(z)
# 類似于
print(x - y)
# 5、difference_update():差集
'''
描述:
difference_update()方法用于移除兩個集合中都存在的元素,即返回差集。
difference_update()與difference()的區(qū)別:
前者是直接在原來的集合中移除元素,沒有返回值;
后者返回 一個移除相同元素的新集合。
語法:
set.difference_update(set)
參數(shù):
set--必須,用于計算差集的集合
返回值:
無
'''
x = {'apple', 'banana', 'cherry'}
y = {'google', 'microsoft', 'apple'}
x.difference_update(y)
print(x) ???# {'banana', 'cherry'}
# 6、discard():
'''
描述:
discard()方法用于移除指定的集合元素。
該方法不同于remove()方法,因為remove()方法在一處一個不存在的元素時會發(fā)生錯誤,而discard()方法不會。
語法:
set.discard(value)
參數(shù):
value--必須,要移除的元素
返回值:
無
'''
fruits = {'apple', 'banana', 'cherry'}
fruits.discard('banana') ????# 刪除已存在的元素
print(fruits) ?????????????????# {'cherry', 'apple'}
fruits.discard('watermelon')# 刪除不存在的元素,不會報錯
# 7、intersection():交集(&)
'''
描述:
intersection()方法用于返回兩個或多個集合中都包含的元素,即交集。
語法:
set.intersection(set1, set2, ...etc)
參數(shù):
set1--必須,要查找相同元素的集合
set2--可選,其他要查找相同元素的集合,可以多個,多個使用逗號隔開
返回值:
返回一個新的集合
'''
x = {'apple', 'orange', 'peach'}
y = {'watermelon', 'grape', 'peach'}
z = {'banana', 'ananas', 'peach'}
result = x.intersection(y, z)
print(result)
# 類似于
print(x & y & z)
# 思考如下例子:
print(x & y | z)
# intersection(set)中,set參數(shù)可以不是集合,可以是任何序列。
x = {1, 2, 3, 4, 'a', 5.6}
y = x.intersection('a') ????# str類型
print(y) ???????????????????# {'a'}
y2 = x.intersection([2]) ???# list類型
print(y2) ??????????????????# {2}
y3 = x.intersection((2,)) ??# tuple類型
print(y3) ??????????????????# {2}
# 而對字典則是與字典的key值比較:
y4 = x.intersection({'a': 2})
print(y4) ??????????????????# {'a'}
y5 = x.intersection({1: 2})
print(y5) ??????????????????# {1}
# 8、intersection_update():交集
'''
描述:
intersection_update()方法用于獲取兩個或多個集合中都重疊的元素,即計算交集。
intersection_update()與intersection的區(qū)別:
前者是在原始的集合上移除不重疊的元素,沒有返回值;
后者返回一個新的集合。
語法:
set.intersection_update(set1, set2, ...etc)
參數(shù):
set1--必須,要查找相同元素的集合
set2--可選,其他要查找相同元素的集合,可以多個,多個使用逗號隔開
返回值:
無
'''
x = {"apple", "banana", "cherry"} ??# y 集合不包含?banana 和?cherry,被移除
y = {"google", "runoob", "apple"}
z = {'watermelon', 'pumpkin', 'apple'}
result = x.intersection(y, z)
print(result) ???# {'apple'}
# 9、isdisjoint():
'''
描述:
isdisjoint()方法用于判斷兩個集合是否包含相同的元素,如果沒有返回True,否則返回False。
語法:
set.isdisjoint(set1)
參數(shù):
set--必須,要比較的集合
返回值:
返回布爾值,如果不包含返回True,否則返回False
'''
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "baidu"}
z = {'watermelon', 'pumpkin', 'apple'}
result = x.isdisjoint(y)
print(result) ??????# 不包含,返回True
result2 = x.isdisjoint(z)
print(result2) ?????# 包含,返回False
# 10、issubset():子集
'''
描述:
issubset()方法用于判斷集合的所有元素是否都包含在指定集合中,
即?x 是否包含在?y 中,如果是則返回True,否則返回False。
語法:
set.issubset(set)
參數(shù):
set--必須,要查找的集合
返回值:
返回布爾值,如果都包含返回True,否則返回False
'''
x = {"a", "b", "c"}
y = {"f", "e", "d", "c", "b", "a"}
z = {"f", "e", "d", "c", "b"}
result = x.issubset(y)
print(result) ??????# x 包含在?y 中,返回True
result2 = x.issubset(z)
print(result2) ?????# x 不包含在?y 中,返回False
# 11、issuperset():父集
'''
描述:
issuperset()方法用于判斷指定集合的所有元素是否都包含在原始的集合中,
即?y 是否包含在?x 中,如果是則返回True,否則返回False。
語法:
set.issuperset(set)
參數(shù):
set--必須,要查找的集合
返回值:
返回布爾值,如果都包含返回True,否則返回False
'''
x = {"f", "e", "d", "c", "b", "a"}
y = {"a", "b", "c"}
z = {"f", "e", "d", "c", "b"}
result1 = x.issuperset(y)
print(result1) ?????# y 包含在?x 中,返回True
result2 = z.issuperset(y)
print(result2) ?????# y 不包含在?z 中,返回False
# 12、pop():
'''
描述:
pop()方法用于隨機移除一個元素,一般是移除左邊第一個元素。
語法:
set.pop()
參數(shù):
無
返回值:
返回移除的元素
'''
fruits = {'apple', 'banana', 'cherry'}
x = fruits.pop()
print('被移除的元素:', x) # 被移除的元素:?cherry
print(fruits) ???????????# {'apple', 'banana'}
print('--------- 分割線?---------')
### pop()方法的規(guī)律總結(jié):
s1 = {2, 5, 7, 4} ??????????????# 集合里只有數(shù)字
s2 = {'你', '我', '他', '大家'} ?# 集合里無數(shù)字
s3 = {3, 5, 2.9, '你', 'X', 'Y'} ?# 集合里既有數(shù)字又有非數(shù)字
s1.pop() ???# 元素是數(shù)字時,刪除最小的數(shù)字,其余數(shù)字升序排列
s2.pop() ???# 元素非數(shù)字時,隨即刪除一個元素,其余元素隨機排序
s3.pop() ???# 元素既有數(shù)字又有非數(shù)字時,若刪除的是數(shù)字,則一定刪除最小的,否則隨機刪除一個非數(shù)字元素
print(s1)
print(s2)
print(s3)
# 多次運行觀察打印結(jié)果
'''
總結(jié):
1、如果集合的元素都是數(shù)字, 刪除時, 刪掉的是最小的數(shù)字, 其余數(shù)字升序排列。
2、如果集合的元素是非數(shù)字, 刪除時, 刪掉的是隨機的元素, 其余元素隨機排列。
3、如果集合里既有數(shù)字又有非數(shù)字元素時:
·若刪掉的是數(shù)字, 則一定是刪掉了最小的, 其他數(shù)字升序排列, 非數(shù)字元素隨機排列;
·若刪掉的非數(shù)字, 則一定是隨機刪掉了一個, 其他數(shù)字升序排列, 非數(shù)字則隨機排列。
'''
# 13、remove()方法用于移除集合中的指定元素:
'''
描述:
remove()方法用于移除集合中的指定元素
該方法不同于discard()方法,因為remove()方法在移除一個不存在的元素時會報錯,而discard()方法不會報錯。
語法:
set.remove(item)
參數(shù):
item--要移除的元素
返回值:
無
'''
fruits = {'apple', 'banana', 'cherry'}
fruits.remove('banana')
print(fruits) ??# {'apple', 'cherry'}
# fruit.remove('peach') ?????# 不存在則報錯:KeyError: 'peach'
# 14、symmetric_difference():對稱差集(^)
'''
描述:
symmetric_difference()方法返回兩個集合中不重復(fù)的元素集合,即會移除兩個集合中都存在的元素。
語法:
set.symmetric_difference(set)
參數(shù):
set--集合
返回值:
返回一個新的集合
'''
x6 = {'apple', 'orange', 'peach'}
y6 = {'watermelon', 'grape', 'peach'}
result6 = x6.symmetric_difference(y6)
print(result6)
# 等同于
print(x6 ^ y6)
# 15、symmetric_difference_update():
'''
描述:
symmetric_difference_update()方法移除當(dāng)前集合中在另一個指定集合相同的元素,
并將另一個指定集合中不同的元素插入到當(dāng)前集合中。
語法:
set.symmetric_difference_update(set)
參數(shù):
set--要檢測的集合
返回值:
無
'''
x7 = {'apple', 'orange', 'peach'}
y7 = {'watermelon', 'grape', 'peach'}
x7.symmetric_difference_update(y7)
print(x7)
# 16、union():并集(|)
'''
描述:
union()方法返回兩個集合的并集,即包含了所有集合的元素,重復(fù)的元素只會出現(xiàn)一次。
語法:
set.union(set1, set2, ...)
參數(shù):
set1--必須,合并的目標(biāo)集合
set2--可選,其他要合并的集合,可以多個,多個使用逗號隔開
返回值:
返回一個新集合。
'''
x8 = {'apple', 'orange', 'peach'}
y8 = {'watermelon', 'grape', 'peach'}
z8 = {'banana', 'ananas', 'peach'}
result8 = x8.union(y8, z8)
print(result8)
# 17、update():
'''
描述:
update()方法用于修改當(dāng)前集合,可以添加新的元素或集合到當(dāng)前集合中,
如果添加的元素在集合中已存在,則該元素只會出現(xiàn)一次,重復(fù)的會忽略。
語法:
set.update(set)
參數(shù):
set--必須,可以是元素或集合
返回值:
無
'''
x9 = {'apple', 'orange', 'peach'}
y9 = {'watermelon', 'grape', 'peach'}
x9.update({'pear'}) ??# 新添加的元素被分隔后添加到集合中
print(x9) ??# 不加集合{}的字符串,結(jié)果:{'peach', 'apple', 'e', 'p', 'orange', 'r', 'a'}
x9.update(y9)
print(x9)
Python集合推導(dǎo)式
字典推導(dǎo)式的語法格式如下:
{表達式 for 迭代變量 in 可迭代對象 [if條件表達式]} # []中內(nèi)容可有可無
集合是無序且不重復(fù)的,所以會自動去掉重復(fù)的元素,并且每次運行顯示的順序不一樣.
從上面的代碼中可以總結(jié):
集合推導(dǎo)式就是將列表推導(dǎo)式的[?]換成{?},字典推導(dǎo)式就是推導(dǎo)出兩個值并構(gòu)建成鍵值對的樣子.
另外,不管是字典推導(dǎo)式還是集合推導(dǎo)式,后面都可以像列表推導(dǎo)式一樣接if條件語句,嵌套循環(huán)等,具體可以根據(jù)您自己的需求來使用.
'''集合推導(dǎo)式'''
# 遍歷一個可迭代對象生成集合
set_a = {value for value in '有人風(fēng)輕云淡,有人負(fù)重前行'}
print(set_a)
square = {x ** 2 for x in [2, 2, 3, 4, 5, 6]}
print(square)
# 用集合推導(dǎo)式建立字符串長度的集合
strings = ['a', 'is', 'with', 'if', 'file', 'exception']
set_len = {len(s) for s in strings} # 長度相同的只留一個,這在實際上非常有用
print(set_len)
# 一個由男生和女生列表組成的嵌套列表,取出姓名中帶有兩個以上字母e的名字,組成列表
names = [
['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],
['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']
]
# 用for循環(huán)實現(xiàn):
tmp = []
for lst in names:
for name in lst:
if name.count('e') >= 2:
tmp.append(name)
print(tmp) ???# ['jefferson', 'wesley', 'steven', 'jennifer']
# 用推導(dǎo)式嵌套列表實現(xiàn):
result1 = [name for lst in names for name in lst if name.count('e') >= 2]
print(result1) ?# ['jefferson', 'wesley', 'steven', 'jennifer']
# result1 = [[name for lst in names]for name in lst if name.count('e') >= 2] ???# 這個式子該怎么寫?這個語句是錯誤的,正確語句如下
result2?= [[name for name in lst ?if name.count('e') >= 2] for lst in names]
print(result2) ?# [['jefferson', 'wesley', 'steven'], ['jennifer']]
'''
小練習(xí):
1、產(chǎn)生10個1~20的隨機數(shù),去除里面的重復(fù)項
2、鍵盤輸入一個數(shù),將該數(shù)從不重復(fù)的集合中刪除
'''
import random
set1 = set()
i = 1
while i <= 10:
rand = random.randint(1, 20)
if rand not in set1:
set1.add(rand)
i += 1
print(set1, len(set1))
# {3, 6, 7, 8, 13, 15, 16, 18, 19, 20} 10
num = int(input('輸入一個要刪除的數(shù)字:')) # 需強轉(zhuǎn)為int型
if num in set1:
set1.remove(num)
# 或
# set1.discard(num)
print(set1, len(set1))
# 輸入3后,{6, 7, 8, 13, 15, 16, 18, 19, 20} 9
else:
print('集合里不存在該數(shù)!')
set1 = {2, 3, 4, 5}
set2 = {2, 3, 4, 5}
print(id(set1), id(set2)) ??# 查看兩個集合的地址
print(set1 == set2) ????# 判斷兩個集合中的內(nèi)容是否相等
print(set1 != set2) ????# 判斷兩個集合中的內(nèi)容是否不相等
Python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。