1. 程式人生 > >元組tuple、字典dict、集合set

元組tuple、字典dict、集合set

默認 isp lap map 並集 如何 play bsp 重復

一、元組tuple

定義:與列表相比,只是把 [ ] 換成 ( )

t1 = (1, 2)
t2 = tuple((1, 2))
t3 = (1, )
思考:如何定義一個只有一個值的元組
print(("Owen", ))
print(tuple([Owen]))

1、參數為for可以循環的對象(可叠代對象)

t2 = tuple("123")       #字符串
print(t2, type(t2))
t3 = tuple([1, 2, 3])   #列表
print(t3, type(t3))
t4 = tuple((7, 8, 9))   #
元組 print(t4, type(t4))

2、索引取值

t = (1,2,3,2,3,2)
    print(t[1])
    print(t[-2])

3、切片

print(id(t))
nt=t[:-1:]
print(nt,id(nt))

4、長度

print(len(t))

5、元組內置方法

print(t.count(2))    #該數據集合可以存放相同數據
print(t.index(2,1,2))

6、元組取值的兩個方法:6.1、.count(obj)

6.2、 .index(obj, bIndex, eIndex)

7、有序存儲 | 可存放多個數據 | 不可變(內部可以包含可變對象,可變對象已久可變)

8、應用場景:將不允許操作的列表可以轉化為元組,將允許操作的元組轉化為列表

二、字典dict

聲明:dict的key:可以為所有不可變類型:int float tuole str bool None,一般就采用字符串

dict的value:可以為所有數據類型

註:key具有唯一性(重復會覆蓋舊值),value可以重復

dic = {1: None, None: None, 3.14: None,
           True: None, abc
: None, (1,): None, None: 12345 } print(dic) # 1、 d1 = {name: Owen, age: 18} print(d1) # 2、 d2 = dict({name: Owen, age: 18}) print(d2) # 3、 d3 = dict(name=Egon, age=58) print(d3)

1、定義

d1 = {a: 10, b: 20}

2、無序,存放多個值,可變 => 通過key取值

d1[a]

3、增刪改查

d1[key] = value: key存在就是改,不存在就是增
d1[key]: 取,如果key存在就報錯,所以用get(key, defalut)
update({a: 100, c: 300}): key有更新,無新增
pop(key): 根據key刪且返回對應value

4、key存在,不操作,不存在設置key=default

setDefault(key, default)

5、get取值*****

dic = {a: 10, b: 20}
        # print(dic[‘c‘])  # KeyError
    res = dic.get(c)  # 擁有默認值,None,可以避免錯誤
        print(res)
    res = dic.get(d, key不存在)  # 可以自定義默認值
        print(res)

6、隨機刪除,返回值是(key, value)

print(dic)
print(dic.popitem())
print(dic.popitem())
print(dic)

7、如何定義一個空字典

7.1、第一個參數:keys:list|tuple|str,第二個參數:統一的默認value
    d10 = {}.fromkeys([a, b, c], ‘‘)
        print(d10)  # {‘a‘: ‘‘, ‘b‘: ‘‘, ‘c‘: ‘‘}

7.2、獨自設置默認值
    d11 = {a: 10, teas: [Owen]}
    d11 = {a: 10}

7.3、添加老師

如果有teas,在原teas基礎上添加老師,如果沒有,新建一個空teas
    if teas not in d11:  # 成員運算
        d11[teas] = []
    d11[teas].append(Egon)
    d11[teas].append(LiuXX)
        print(d11)

原d11中,如果有teas這個key,setdefault相當於什麽都沒幹
如果沒有,就將第二個參數(默認值)傳給teas存放到d11中
    d11.setdefault(teas, [])
    d11[teas].append(Egon)
    d11[teas].append(LiuXX)
        print(d11)    

三、集合set

1、定義

s1 = set()
s2 = set({1, 2, 3})

2、重點:數據具有唯一性

# i) 單列數據集合:str,list,tuple,set 雙列:dict
# ii) 無序存儲:無key無index,無法取值
# iii) 可變數據類型,內部可以存放任意類型數據,但數據具有唯一性

{}代表空字典,用set()來創建空集合
s1 = set()
  print(s1, type(s1))
s2 = set(abc)
  print(s2, type(s2))

3、運算

p_set = {a, b, c, egon}
l_set = {x, y, z, egon}

3.1、交集

res = p_set & l_set
  print(res)
res = p_set.intersection(l_set)
  print(res)  # {‘egon‘}

3.2、並集

res = p_set | l_set
  print(res)
res = p_set.union(l_set)
  print(res)  # {‘z‘, ‘c‘, ‘y‘, ‘x‘, ‘b‘, ‘a‘, ‘egon‘}

3.3、差集

res = p_set - l_set
    print(res)  # {‘a‘, ‘b‘, ‘c‘}
res = l_set.difference(p_set)
    print(res)  # {‘x‘, ‘z‘, ‘y‘}

3.4、對稱差集

res = p_set ^ l_set
  print(res)
res = p_set.symmetric_difference(l_set)
  print(res)  # {‘y‘, ‘a‘, ‘b‘, ‘x‘, ‘z‘, ‘c‘}

4、了解:

sup_set = {1, 2, 3, 4, 5}
sub_set = {1, 2, 3}
temp_set = {3, 2, 1}
flag_set = {7, 8, 9}

print(sup_set > sub_set)  # True
print(sup_set < sub_set)  # False
print(temp_set == sub_set)  # True

# 兩個set是否沒有交集 res = flag_set.isdisjoint(temp_set) # True

5、添加刪除操作

s = set()
s.add(abc)
s.add(xyz)
print(s)
res = s.pop()  # 隨機刪除一個ele元素
print(res)
if xyz in s:
s.remove(xyz)  # 有ele刪除,無ele拋異常

6、利用set去重

classes = set()
for _, cless in class_map:
    classes.add(cless)
classes = list(classes)
print(classes)

7、了解:父子set

sup_set = {1, 2, 3, 4, 5}
sub_set = {1, 2, 3}
temp_set = {3, 2, 1}
flag_set = {7, 8, 9}

print(sup_set > sub_set)
print(sup_set < sub_set)
print(temp_set == sub_set)

8、案例

技術分享圖片
選課:
class_map = [
    (owen, python),
    (egon, linux),
    (egon, python),
    (liuxx, python),
    (liuxx, java)
]
需求:
1.多少人參加了選課: [owen, egon, liuxx]
2.都選了哪些課程: [python, linux, java]
#利用邏輯代碼去重
names = []
for name, _ in class_map:
    # 判斷列表中是否已存在,不存在才添加
    if name not in names:
        names.append(name)
print(names)
案例:選課

元組tuple、字典dict、集合set