python第4课:Set集合、Dict字典

Set集合

  • 和数学里的集合概念一致
  • 内容无序 + 内容不重复

集合定义

# 1.通过set关键字
sa = set("1")    # set expected at most 1 arguments, got 2 集合最多接受一个参数
print(sa)

li = [1,2,3,4,5,6,7,1,2,3,4,5,6,7]
sb = set(li)
print(sb)

# 2.使用大括号
sc = {1,2,3,4,5,6,7,1,2,3,4,5,6,7}
print(sc)   # 自动删除重复值
{'1'}
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}

in操作

if 2 in sc:
    print("Yes")
if 10 not in sc:
    print("No")

    
for i in sc:
    print(i,end=",")
Yes
No
1,2,3,4,5,6,7,

集合的另一种遍历

sa = {(1,2,3),(4,5,6),("limingte","love","hehehe")}
for i,j,k in sa:
    print(i,j,k)
limingte love hehehe
4 5 6
1 2 3

集合的生成式

sa = {1,2,3,4,5,6,7,8,9}
# 利用sa生成sb
sb = {i for i in sa}
print(f"sb集合为:{sb}")

print("——————分割线——————")

sc = {i for i in sa if i%2==0}
print(f"sc集合为:{sc}")

print("——————分割线——————")

# 把sa中的每个元素的平方生成一个新的集合
sd = {i**2 for i in sa}
print(f"sd集合为:{sd}")
sb集合为:{1, 2, 3, 4, 5, 6, 7, 8, 9}
——————分割线——————
sc集合为:{8, 2, 4, 6}
——————分割线——————
sd集合为:{64, 1, 4, 36, 9, 16, 49, 81, 25}

集合的内置函数

#len:长度
print(len(sa))

# max/min:最值
print(f"最大值为:{max(sa)},最小值为:{min(sa)}")

# add:向集合中添加元素
# 这里不能将sa.add(10)写在print中,要先增加操作再打印(对集合进行更改操作时,都要先操作后打印)
sa.add(10)
print(sa)

# clear:清空
sa.clear()
print(sa)
10
最大值为:10,最小值为:1
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
set()

删除操作remove和discard的区别

sa = {1,2,3,4,5,6,7,8,9}
sa.remove(5)
print(sa)
# remove删除不存在的值时会报错
sa.remove(5)
# 发现报错在第6行
{1, 2, 3, 4, 6, 7, 8, 9}
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)

<ipython-input-25-15bf9b998cbc> in <module>
      4 print(sa)
      5 # remove删除不存在的值时会报错
----> 6 sa.remove(5)
      7 # 发现报错在第6行
KeyError: 5
sa = {1,2,3,4,5,6,7,8,9}
sa.discard(5)
print(sa)
sa.discard(5)
print(sa)
# 没有报错
{1, 2, 3, 4, 6, 7, 8, 9}
{1, 2, 3, 4, 6, 7, 8, 9}

集合的数学操作

  • intersection:交集
  • difference:差集
  • union:并集
sa = {1,2,3,4,5,6}
sb = {4,5,6,7,8,9}
#sa和sb的交集
print(sa.intersection(sb))

print("——————分割线——————")

print(sa.difference(sb))
# 差集的另一种表示
print(sa - sb)

print("——————分割线——————")

#sa和sb的并集
print(sa.union(sb))
# 并集无法使用加操作
{4, 5, 6}
——————分割线——————
{1, 2, 3}
{1, 2, 3}
——————分割线——————
{1, 2, 3, 4, 5, 6, 7, 8, 9}

frozenset:固定集合

  • 不允许更改
print(sa)
sb = frozenset(sa)
print(sb)
{1, 2, 3, 4, 5, 6}
frozenset({1, 2, 3, 4, 5, 6})

Dict字典

  • 存放一系列具有映射关系的数据的结构

字典创建及访问

# 用赋值创建字典对象
dict1 = dict()
dict2 = {"鸡":("chicken","fowl"),"兔":("rabbit","hare")}
print(dict2["鸡"],dict2["兔"])
('chicken', 'fowl') ('rabbit', 'hare')

字典的内置函数

  • get:返回键对应的值,如果不存在键则返回默认值
  • values:返回键对应的值
  • key:返回键
  • items:返回所有元素的键和值
# get用法
# 通过输入key来获取字典的值
dict2_key = input("请输入key:")
dict2 = {"鸡":("chicken","fowl"),"兔":("rabbit","hare")}
print(dict2.get(dict2_key,"Not exist!"))
请输入key:鸡
('chicken', 'fowl')
# value示例
for dict2_value in dict2.values():
    print(dict2_value)
('chicken', 'fowl')
('rabbit', 'hare')
# key示例
for dict2_key in dict2.keys():
    print(dict2_key)
鸡
兔
# items用法
for dkey,dvalue in dict2.items():
    print(dkey,dvalue)

# 平均分例题
st = {"1":["L",87],"2":["M",90],"3":["T",78]}
st_sum = 0
for stv in st.values():
    for v in stv:
        if type(v) == type(1):    # 值中只有一个元素是整型,判断v是否为数字
            st_sum += v
print("平均分为:{}".format(st_sum/len(st)))
鸡 ('chicken', 'fowl')
兔 ('rabbit', 'hare')
平均分为:85.0

创建三个学生字典信息,每个学生信息由键盘输入

# 先创建一个空字典
stuDict = dict()
for st in range(3):
    code,name,sex,score = eval(input())
    stuDict[code] = [name,sex,score]
print(stuDict)
# 输入时code没有加引号,则表示非字符串
1,"li","男",89
2,"ming","男",80
3,"te","女",90
{1: ['li', '男', 89], 2: ['ming', '男', 80], 3: ['te', '女', 90]}
for code in stuDict.keys():
    print(type(code))
# 可见打印code均为int
<class 'int'>
<class 'int'>
<class 'int'>
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页