day9-筆記set

一.什么是集合

python內(nèi)置的容器型數(shù)據(jù)類型. 可變(支持增刪改),無序(不支持下標操作)
{元素1,元素2,元素3,...}
元素要求是不可變并且唯一

set1 = {1, 2, 3, 'abc', 100, 1, 1, (1, 2)}
print(set1, type(set1))

空集合: set()


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

3.增
集合.add(元素) - 在集合中添加指定的元素

set2 = {100, 2, 5, 20}
set2.add(200)
print(set2)

集合.update(序列) - 將序列中的元素添加到集合中

set2.update('abc')
print(set2) # {2, 'c', 100, 5, 'a', 20, 'b'}

  1. 集合.remove(元素) - 刪除集合中指定元素,元素不存在會報錯
set2 = {100, 2, 5, 20}
set2.remove(100)
print(set2)

集合.clear() - 清空集合

set2.clear()
print(set2)
  1. 改(集合不支持改操作)

6.數(shù)學集合運算(集合應(yīng)用的重點)
包含關(guān)系(>=, <=)蛇损、并集()英岭、交集灵妨、差集胆描、補集

# 1)包含關(guān)系
# 集合1 >= 集合2    -  判斷集合1中是否包含集合2
# 集合1 <= 集合2    -  判斷集合2中是否包含集合1
print({100, 2, 3, 200, 300, 400, 1} >= {1, 2, 3})

# 2)并集(|)
# 集合1 | 集合2     - 將集合1和集合2中的元素合并在一起產(chǎn)生新的集合(會去重)
set1 = {1, 2, 3, 4, 5}
set2 = {1, 2, 3, 8, 9, 10}
print(set1 | set2

# 交集(&)
# 集合1 & 集合2
print(set1 & set2)

# 差集(-)
# 集合1 - 集合2    - 集合1中除了和集合2公共的元素以外的元素
print(set1 - set2)

# 補集(^)
print(set1 ^ set2)

7.相關(guān)的操作
in / not in
set()

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

# 練習: 用三個列表表示三門學科的選課學生姓名(一個學生可以同時選多門課),
# 1. 求選課學生總共有多少人
# 2. 求只選了第一個學科的人的數(shù)量和對應(yīng)的名字
# 3. 求只選了一門學科的學生的數(shù)量和對應(yīng)的名字
# 4. 求只選了兩門學科的學生的數(shù)量和對應(yīng)的名字
# 5. 求選了三門學生的學生的數(shù)量和對應(yīng)的名字
names1 = ['name1', 'name2', 'name3', 'name4', 'name5', 'name6']
names2 = ['name1', 'name2', 'name7', 'name8', 'name9', 'name10']
names3 = ['name2', 'name3', 'name4', 'name7', 'name11', 'name12']

total0 = set(names1) | set(names2) | set(names3)
print('選課學生總共有多少人:%d' % len(total0))

total = set(names1) - set(names2) - set(names3)
total = set(names1) - (set(names2) | set(names3))
print('只選了第一個學科的人的數(shù)量:%d,對應(yīng)的名字:%s' % (len(total), str(total)[1:-1]))

total1 = (set(names1) ^ set(names2) ^ set(names3)) - (set(names1) & set(names2) & set(names3))
print('只選了一門學科的學生的數(shù)量:%d, 對應(yīng)的名字:%s' % (len(total1), str(total1)[1:-1]))

# 所有學生 - 只選了一科的學生 - 選了三科的學生
total2 = total0 - total1 - (set(names1) & set(names2) & set(names3))
print('只選了兩門學科的學生的數(shù)量:%d, 對應(yīng)的名字:%s' % (len(total2), str(total2)[1:-1]))

total3 = set(names1) & set(names2) & set(names3)
print('選了三門學科的學生的數(shù)量:%d, 對應(yīng)的名字:%s' % (len(total3), str(total3)[1:-1]))

二.container(容器)

"""
1.容器類型:字符串(str)倒槐、列表(list)、元祖(tuple)鹰霍、字典(dict)豹休、集合(set)
2.特點
str:  不可變镜沽、有序
list:  可變敏晤、有序
tuple: 不可變、有序
dict:  可變缅茉、無序
set:   可變嘴脾、無序

3.值
str:   "hsj護士節(jié)",'\naa\t123\'aaa\"345\\' , '\u3467'  '\u3fd3'  '%c' % (0x4eff)  
        (python中的字符串,可以是單引號蔬墩、雙引號或者三個單引號译打、三個雙引號) 
list:   [元素1, 元素2,...] , 元素可以是任何類型的數(shù)據(jù),類型可以不一致拇颅,元素可以重復(fù)
tuple:  (元素1, 元素2,...) , 元素可以是任何類型的數(shù)據(jù)奏司,類型可以不一致,元素可以重復(fù)  
dict:   {key1: value1, key2: value2, ...}, key是不可變的樟插,唯一的韵洋; value可以是任何類型的數(shù)據(jù),類型可以不一致黄锤,可以重復(fù)
set:    {元素1, 元素2, ...} ,  元素是不可變的搪缨,唯一的

4.增
list: 列表.append(元素) 、列表.insert(下標, 元素)
dict: 字典[key] = 值 鸵熟、 字典.setdefault(key,值)
set: 集合.add(元素)

5.刪
list: del 列表[下標] 副编、 列表.pop()\列表.pop(下標) 、列表.remove(元素)
dict: del 字典[key] 流强、 字典.pop(key)
set:  集合.remove(元素)

6.改
list: 列表[下標] = 新值
dict: 字典[key] = 新值

7.查
str:  查單個(下標)痹届、切片、遍歷  
list:  查單個(下標)打月、切片短纵、遍歷 
tuple: 查單個(下標)、切片僵控、遍歷 
dict:  查單個(key)香到、遍歷(遍歷拿到key) 
set:  遍歷 

8.使用
str: 單獨文字數(shù)據(jù)使用字符串(除了數(shù)字、和布爾表示的其他數(shù)據(jù))
list: 保存多個具有相同意義的數(shù)據(jù)
tuple: 多個數(shù)據(jù)的值或者順序不能變的時候使用元祖(除了一些特殊意義的值报破,類似星期悠就,一般不會選擇用元祖來作為容器)
dict : 同時保存的多個數(shù)據(jù)需要區(qū)分的時候
set:對其他容器中的數(shù)據(jù)去重,或者做數(shù)學集合運算
"""

三.作業(yè)評講(列表)

# 1.已知一個數(shù)字列表充易,求列表中心元素梗脾。
nums = [1, 2, 3, 4, 5, 10, 11]
length = len(nums)
if length % 2 == 0:
    print(nums[length//2], nums[length//2-1])
else:
    print(nums[length//2])
"""
[1,2,3,4]    1, 2  --- 4
[1, 2, 3, 4, 5, 6]    2,3  --- 6
[1, 2, 3]    1   --  3
"""

# 2.已知一個數(shù)字列表,求所有元素和盹靴。
print(sum(nums))

# 3.已知一個數(shù)字列表炸茧,輸出所有奇數(shù)下標元素瑞妇。
print(nums[1::2])

# 4.已知一個數(shù)字列表,輸出所有元素中梭冠,值為奇數(shù)的辕狰。
for num in nums:
    if num % 2 == 1:
        print(num)

# 5.已知一個數(shù)字列表,將所有元素乘二控漠。
nums = [1, 2, 3, 4, 5, 10, 11]
# nums = [2, 4, 6, 8, 10, 20, 22]
# 列表[下標] = 值
for index in range(len(nums)):
    nums[index] *= 2   # nums[index] = nums[index] * 2

print(nums)

# 6.有一個長度是10的列表蔓倍,數(shù)組內(nèi)有10個人名,要求去掉重復(fù)的
# 方法一:用集合
names = ['張三', '李四', '大黃', '張三']
names = list(set(names))
print(names)

names = ['張三', '張三', '李四', '大黃', '張三']
for name in names[:]:
    if names.count(name) > 1:
        names.remove(name)
print(names)

# 7.已經(jīng)一個數(shù)字列表(數(shù)字大小在0~65535之間), 將列表轉(zhuǎn)換成數(shù)字對應(yīng)的字符列表
# 例如: list1 = [97, 98, 99]  -> list1 = ['a', 'b', 'c']
nums = [60, 78, 89, 0x4fff, 0x78ef, 120, 67]
for index in range(len(nums)):
    nums[index] = chr(nums[index])
print(nums)

# 8.用一個列表來保存一個節(jié)目的所有分數(shù)盐捷,求平均分數(shù)(去掉一個最高分偶翅,去掉一個最低分,求最后得分)
scores = [89, 99, 87, 70, 64, 10]
print((sum(scores) - max(scores) - min(scores)) / (len(scores) - 2))

# 9.有另個列表A和B碉渡,使用列表C來獲取兩個列表中公共的元素
# 例如: A = [1, 'a', 4, 90, 1]  B = ['a', 8, 'j', 1] --> C = [1, 'a']
A = [1, 'a', 4, 90, 1]
B = ['a', 8, 'j', 1]
C = list(set(A) & set(B))
print(C)

C = []
for item in A:
    if (item in B) and (item not in C):
        C.append(item)
print(C)

四.作業(yè)評講(字典)

# 1.聲明一個字典保存一個學生的信息聚谁,學生信息中包括: 姓名、年齡滞诺、成績(單科)垦巴、電話
student = {
    'name': '張三',
    'age': 28,
    'score': 89,
    'tel': '18273923883'
}
print(student)

# 2.聲明一個列表,在列表中保存6個學生的信息(6個題1中的字典)
all_students = [
    {'name': '張三', 'age': 28, 'score': 89, 'tel': '18273923883'},
    {'name': '小明', 'age': 18, 'score': 99, 'tel': '15382933980'},
    {'name': 'Lucy', 'age': 28, 'score': 99, 'tel': '18273923818'},
    {'name': '路飛', 'age': 17, 'score': 78, 'tel': '15382933982'},
    {'name': 'Mike', 'age': 22, 'score': 40, 'tel': '18273923838'},
    {'name': 'Tom', 'age': 16, 'score': 90, 'tel': '15382933981'},
]


print('==============第a,b,c題==============')
count = 0    # 不及格人數(shù)
count2 = 0   # 未成年人數(shù)

for stu_dict in all_students:
    # a.統(tǒng)計不及格學生的個數(shù)
    # b.打印不及格學生的名字和對應(yīng)的成績
    if stu_dict['score'] < 60:
        print('%s: %d' % (stu_dict['name'], stu_dict['score']))
        count += 1

    # c.統(tǒng)計未成年學生的個數(shù)
    if stu_dict['age'] < 18:
        count2 += 1

    # d.打印手機尾號是8的學生的名字
    if stu_dict['tel'][-1] == '8':
        print('%s的手機號:%s' % (stu_dict['name'], stu_dict['tel']))

print('不及格學生人數(shù): %d' % count)
print('未成年學生人數(shù): %d' % count2)

# e.打印最高分和對應(yīng)的學生的名字
max_score = 0
for stu_dict in all_students:
    if stu_dict['score'] > max_score:
        max_score = stu_dict['score']

for stu_dict in all_students:
    if stu_dict['score'] == max_score:
        print(stu_dict['name'], max_score)


# f.將列表按學生成績從大到小排序(掙扎一下铭段,不行就放棄)
all_students.sort(key=lambda x: x['age'], reverse=True)
print(all_students)

# 選擇排序
# 1骤宣, 5 ,6 序愚,2憔披,3  --> 1, 2, 3,5,6
"""
nums = [1, 5, 6, 2, 3]
[1, 5, 6, 2, 3]
[1, 2, 6, 5, 3]
[1, 2, 3, 6, 5]  
[1, 2, 3  5, 6]     
"""
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)

length = len(all_students)
for index1 in range(length-1):
    for index2 in range(index1+1, length):
        if all_students[index2]['score'] < all_students[index1]['score']:
            all_students[index1], all_students[index2] = all_students[index2], all_students[index1]
print(all_students)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爸吮,隨后出現(xiàn)的幾起案子芬膝,更是在濱河造成了極大的恐慌,老刑警劉巖形娇,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锰霜,死亡現(xiàn)場離奇詭異,居然都是意外死亡桐早,警方通過查閱死者的電腦和手機癣缅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哄酝,“玉大人友存,你說我怎么就攤上這事√招疲” “怎么了屡立?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搀军。 經(jīng)常有香客問我膨俐,道長勇皇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任焚刺,我火速辦了婚禮敛摘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘檩坚。我一直安慰自己,他們只是感情好诅福,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布匾委。 她就那樣靜靜地躺著,像睡著了一般氓润。 火紅的嫁衣襯著肌膚如雪赂乐。 梳的紋絲不亂的頭發(fā)上钮科,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天免猾,我揣著相機與錄音疫向,去河邊找鬼捣卤。 笑死擦剑,一個胖子當著我的面吹牛苏潜,可吹牛的內(nèi)容都是我干的漱受。 我是一名探鬼主播瞻凤,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼伶唯,長吁一口氣:“原來是場噩夢啊……” “哼觉既!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乳幸,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瞪讼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粹断,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體符欠,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年瓶埋,在試婚紗的時候發(fā)現(xiàn)自己被綠了希柿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡养筒,死狀恐怖狡汉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闽颇,我是刑警寧澤盾戴,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站兵多,受9級特大地震影響尖啡,放射性物質(zhì)發(fā)生泄漏橄仆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一衅斩、第九天 我趴在偏房一處隱蔽的房頂上張望盆顾。 院中可真熱鬧,春花似錦畏梆、人聲如沸您宪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宪巨。三九已至,卻和暖如春溜畅,著一層夾襖步出監(jiān)牢的瞬間捏卓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工慈格, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怠晴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓浴捆,卻偏偏與公主長得像蒜田,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子选泻,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一物邑、基礎(chǔ)知識:1、JVM滔金、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,369評論 0 4
  • 1.什么是集合set python內(nèi)置的容器型數(shù)據(jù)類型:可變(支持增刪,不能改),無序(不支持下標操作) {元素1...
    不挖石油的小小閱讀 256評論 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,511評論 1 51
  • 并不是所有的鮮花都能代表愛餐茵,只有玫瑰做到了科阎;并不是所有的山峰都能代表偉大,只有珠穆瑯瑪做到了忿族;并不是所有...
    暖陽西子閱讀 236評論 0 0
  • 說實話锣笨,不知道這是一種什么樣的心情。曾經(jīng)那個兒時陪你玩耍道批,少女時遠走他鄉(xiāng)错英,成年時再相見的人。此刻就...
    Phcyni閱讀 188評論 0 0