day9 set 總結(jié)

1.什么是集合set

  • python內(nèi)置的容器型數(shù)據(jù)類型:可變(支持增刪,不能改),無序(不支持下標(biāo)操作)
  • {元素1,元素2,元素3,...}
  • 元素要求:不可變;且唯一
set1 ={1,4,3,'abc',1,1}
print(set1)   # {'abc', 1, 3, 4}  無序,唯一

2.查

  • 集合沒有辦法單獨(dú)取出某一個元素:只能遍歷
for item in set1:
    print(item)

3.增

  • 集合.add(元素) -- 在集合中添加指定的元素,若元素已經(jīng)存在,無效
set2 = {100,2,5,20,233}
set2.add(200)
print(set2)    #{2, 100, 5, 200, 233, 20}
  • 集合.update(序列)
set2.update('asb')  #將序列中各個元素添加到集合中
print(set2)     #{'b', 2, 100, 5, 200, 233, 20, 'a', 's'}

set2.update({'aa':11,'bb':22})     #添加字典中的key
print(set2)     #{2, 100, 5, 's', 'b', 200, 233, 'a', 'bb', 'aa', 20}

4.刪

  • 集合.romove(元素) -- 刪除集合中指定的元素,元素不存在(報(bào)錯)
set2.remove(200)
print(set2)      #{2, 100, 5, 233, 's', 'bb', 'a', 'b', 20, 'aa'}
  • 集合.clear() -- 清空集合
set2.clear()
print(set2)    #set()
  • 空集合 set()

5.改 -- 集合不支持改操作

6.數(shù)學(xué)集合運(yùn)算(集合應(yīng)用的重點(diǎn))

  • 包含與被包含關(guān)系(>= / <=)、并集(|)、交集(&)、差集(-)、補(bǔ)集(^)

  • a.包含關(guān)系

  • 集合1 >= 集合2 (集合1 <= 集合2) -- 判斷集合1中是否包含集合2...

print({1,2,4,5} >= {1,2,3})    #False
print({1,2,3,4,5} >= {1,2,3})  #True
  • b.并集

  • 集合1 | 集合2 --將集合1,集合2中元素去重,合并,產(chǎn)生一個新的集合
    print({1,2,4,5} | {1,6,7}) #{1, 2, 4, 5, 6, 7}

  • c.交集(&)

  • 集合1 & 集合2 --將集合1,集合2共同含有的元素取出來,合并,產(chǎn)生一個新的集合
    print({1,2,4,5} & {1,6,7}) #{1}

  • d. 差集(-)

  • 集合1 - 集合2 -- 集合1中元素除去與集合2共同的元素,剩余的元素產(chǎn)生一個新的集合
    print({1,2,4,5} - {1,6,7}) #{2, 4, 5}

  • e.補(bǔ)集(^)

  • 集合1 ^ 集合2 -- 集合1并集合2,減去公共部分,產(chǎn)生一個新的集合
    print({1,2,4,5} ^ {1,6,7}) #{2, 4, 5, 6, 7}

7.相關(guān)操作

  • in / not in
    print(1 in {1,2,4,5} ) #True

set() 轉(zhuǎn)換去重(但會打亂順序),也可以表示空集合

總結(jié):集合的應(yīng)用主要表現(xiàn)在去重和數(shù)據(jù)的集合運(yùn)算

練習(xí):用三個列表表示三門學(xué)科的選課學(xué)生姓名(一個學(xué)生可選多門課)

  • 1.求選課學(xué)生總?cè)藬?shù);
  • 2.求只選了第一個學(xué)科的學(xué)生數(shù)量
  • 3.求只選了一門學(xué)科的學(xué)生數(shù)量
  • 4.求只選了兩門學(xué)科的學(xué)生數(shù)量
  • 5.求選了三門學(xué)科的學(xué)生數(shù)量
names1_math = ['a','b','d','e','f']
names2_chinese = ['a','c','g','h']
names3_English = ['a','c','d','e','h']
#1
all_names = set(names1_math)|set(names2_chinese)|set(names3_English)
print('學(xué)生總?cè)藬?shù):',len(all_names),all_names)
#2
math_names = set(names1_math)-set(names2_chinese)-set(names3_English)
print('只選了第一個學(xué)科的學(xué)生數(shù)量',len(math_names),math_names)

#3
one_names = (set(names1_math)^set(names2_chinese)^set(names3_English))-((set(names1_math)&set(names2_chinese))&set(names3_English))
print('只選了一門學(xué)科人數(shù)',len(one_names),one_names)
#4
two_names = ((set(names1_math)&set(names2_chinese))|(set(names1_math)&set(names3_English)))^(set(names2_chinese)&set(names3_English))
print('只選了兩門學(xué)科人數(shù)',len(two_names),two_names)
#5
three_names = ((set(names1_math)&set(names2_chinese))&set(names3_English))
print('選了三門學(xué)科人數(shù)',len(three_names),three_names)

歸納總結(jié):

  • 1.容器類型
    字符串str
    列表list
    元祖tuple
    字典dict
    集合set
  • 2.特點(diǎn)
    str 不可變;有序
    list 可變,有序
    tuple 不可變,有序
    dict 可變,無序
    set 可變,無序
  • 3.值
    str: 'www' "11122" (python中的字符串,可以是單引號/雙引號,三個單引號/雙引號(多行字符串))
    list: [元素1,元素2,元素3,...] 元素是任何類型的數(shù)據(jù),類型可以不一致,元素可以重復(fù)
    tuple (元素1,元素2,元素3,...) 元素是任何類型的數(shù)據(jù),類型可以不一致,元素可以重復(fù)
    dict {key1:value1,key2:value1,...} key是不可變且唯一的;value是任何類型的數(shù)據(jù),類型可以不一致,可以重復(fù)
    set {元素1,元素2,...} 元素是不可變且唯一的
  • 4.增:
    list: 列表.append(元素); 列表.insert(下標(biāo),元素)
    dict: 字典[key] = 值; 字典.setdefault(key,值)
    set : 集合.add(元素)
  • 5.刪:
    list: del 列表[下標(biāo)] , 列表.pop() / 列表.pop(下標(biāo)) ; 列表.remove(元素)
    dict: del 字典[key] ; 字典.pop(key)
    set: 集合.remove(元素)
  • 6.改:
    list: 列表[下標(biāo)] = 新值
    dict: 字典[key] = 新值
  • 7.查:
    str: 查單個、切片、遍歷
    list 查單個、切片、遍歷
    tuple 查單個、切片、遍歷
    dict 查單個(根據(jù)key,取值)、遍歷(取key)
    set 遍歷
  • 8.使用
    str:單獨(dú)文字?jǐn)?shù)據(jù)使用字符串(除了數(shù)字、bool表示的其他數(shù)據(jù))
    list:同時保存多個相同意義數(shù)據(jù)
    tuple:多個數(shù)據(jù)的值或者順序不可變(除了一些特殊意義的值以外,一般不用元祖作為容器)
    dict:同時保存的多個數(shù)據(jù)需要區(qū)分的時候
    set:對其他容器內(nèi)的數(shù)據(jù)去重;或者做數(shù)學(xué)集合運(yùn)算

補(bǔ)充:列表中元素按照一定規(guī)律排序(從小到大)

nums = [1, 5, 6, 2, 3]
length = len(nums)

for index1 in range(length-1):
    for index2 in range(index1+1, length):
        if nums[index2] < nums[index1]:
            nums[index1], nums[index2] = nums[index2], nums[index1]
print(nums)     #[1,2,3,5,6]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容