9月24日学习总结

9月24日学习总结

一、字典相关操作和方法

1.字典不支持+、*、>、<、<=、>=

2.字典支持:==、!=

print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})    #True

3.in 和 not in

键in字典 - 判断字典中是否存在指定键

d1 = {'a': 10, 'b': 20, 'c': 30}
print(30 in d1)     # False
print('b' in d1)    # True

4.dict(数据) - 将数据转换成字典

5.数据的要求:

(1)数据本身是一个序列

(2)序列中的元素必须是长度为2的小序列

(3)小序列的第一个元素必须是不可变的

result = dict([(1, 2), 'ab', ['b', 100]])
print(result)    # {1: 2, 'a': 'b', 'b': 100}

注意:将字典转换成列表或者元组的时候,将字典的键作为列表、元组中元素

d1 = {'a': 10, 'b': 20, 'c': 30}
print(list(d1))    # ['a', 'b', 'c']
t1 = ([10, 20], 'ab', (1, 2)) 
print(dict(t1))  # {10: 20, 'a': 'b', 1: 2}
print(list(dict(t1)))   # [10, 'a', 1]

6.相关方法

1.字典.clear() - 清空字典

d1 = {'a': 10, 'b': 20, 'c': 30}
d1.clear()
print(d1)

2.字典.copy()

3.字典.items() - 将字典中的元素转换成元组,返回一个新的序列

{键1:值1,键2:值2} -> [(键1,值1), (键2, 值2)]

stu1 = {'name': '小明', 'gender': '男', 'age': 18}
result = stu1.items()
print(result)   # dict_items([('name', '小明'), ('gender', '男'), ('age', 18)])
print(list(result))  # [('name', '小明'), ('gender', '男'), ('age', 18)]
# 练习1:使用列表推导式,将一个字典的值全部乘以10
d2 = {'a': 2, 'b': 34, 'c': 21}
# {'a': 20, 'b': 340, 'c': 210}
# 字典推导式: {键值对 for 变量 in 序列}
d3 = {x: d2[x]*10 for x in d2}
print(d3)

d3 = {key: value*10 for key, value in d2.items()}
print(d3)

d3 = dict([(x, y*10) for x, y in d2.items()])
print(d3)
# 练习2:使用推导式,交换字典的键和值
d2 = {'a': 2, 'b': 34, 'c': 21}
d3 = {value: key for key, value in d2.items()}
print(d3)

4.字典.keys() - 获取字典所有的键,返回一个新的序列

5.字典.values() - 获取字典所有的值,返回一个新的序列

d2 = {'a': 2, 'b': 34, 'c': 21}
print(d2.values())
print(d2.keys())
# dict_values([2, 34, 21])
# dict_keys(['a', 'b', 'c'])

6.字典.setdefault(键,值) - 在字典中添加一个键值对(如果字典中已经存在这个键值对,不会执行修改操作)

# 字典[键] = 值
d1 = {'a': 10}
d1['b'] = 100
print(d1)

d1.setdefault('c', 200)
print(d1)

7.字典.update(序列) - 将序列中的元素全部添加到字典中

# 序列 - 是字典或者是能转换成字典的序列

d1 = {'a': 10, 'b':20}
d2 = {'name': '小明', 'age': 18, 'a': 200}
d1.update(d2)
print(d1)
d1.update(['mn', (1, 2)])
print(d1)
# {'a': 200, 'b': 20, 'name': '小明', 'age': 18}
# {'a': 200, 'b': 20, 'name': '小明', 'age': 18, 'm': 'n', 1: 2}

二、集合

1.什么是集合

集合是容器型数据类型(序列),将{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2,元素3,…}

集合是可变的,集合是无序的

元素 - 必须是不可变的数据,唯一

1.空集

s1 = set()
print(len(s1), type(s1))     # 0 <class 'set'>

2.集合元素必须是不可变的数据

s2 = {1, 'abc', (23, 4)}
print(s2)

3.集合无序

print({1, 2, 3} == {3, 1, 2})  # True

4.元素是唯一的

s3 = {1, 2, 3, 1, 3, 2, 1}
print(s3)   # {1, 2, 3}

names = ['张三', '张三', '小明', '李四', '张三', '小明']
print(set(names))  # {'李四', '小明', '张三'}

2.集合的增删改查

1.查 - 只能遍历

hobby={'玩游戏','看电影','打篮球','爬山','做饭'}
for x in hobby:
    print(x)

2.增

集合.add(元素)

集合.update(序列)

hobby.add('游泳')
print(hobby)

hobby.update(('乒乓球', '羽毛球'))
print(hobby)

3.删

(1)集合.remove(元素)

(2)集合.discard(元素) - 如果元素不存在不会报错

hobby.remove('做饭')
print(hobby)

hobby.discard('玩游戏')
print(hobby)

三、数学集合运算

1.Python中的集合支持数学集合运算

1.并集 - |

集合1|集合2 - 将两个集合合并成一个集合

s1 = {1, 2, 3, 4, 5, 6}
s2 = {4, 5, 6, 7, 8}
result = s1 | s2
print(result)   # {1, 2, 3, 4, 5, 6, 7, 8}

2.交集 - &

集合1&集合2 - 获取两个集合的公共部分,产生一个新的集合

s1 = {1, 2, 3, 4, 5, 6}
s2 = {4, 5, 6, 7, 8}
result = s1 & s2
print(result)   # {4, 5, 6}

3.差集 - -

集合1-集合2 - 获取集合1中去掉包含在集合2中的元素,剩下的元素

s1 = {1, 2, 3, 4, 5, 6}
s2 = {4, 5, 6, 7, 8}
result = s1 - s2
print(result)     # {1, 2, 3}
result = s2 - s1
print(result)    # {7, 8}

4.对称差集 - ^

集合1^集合2 - 将两个集合合并,去掉公共部分获取剩下的部分

s1 = {1, 2, 3, 4, 5, 6}
s2 = {4, 5, 6, 7, 8}
result = s1 ^ s2
print(result)   # {1, 2, 3, 7, 8}

5.判断子集关系

# 子集:<=、>=
# 真子集:<、>
# 集合1 > 集合2 - 判断集合2是否是集合1的真子集
# 集合1 < 集合2 - 判断集合2是否是集合1的真子集
s3 = {10, 20, 30}
# 真子集:{10}, {20}, {30}, {10, 20},空集...
# 子集: {10}, {20}, {30}, {10, 20}, 空集...{10, 20, 30}

print({100, 200, 300} >= {100, 200, 300})  # True
print({100, 200, 300} > {100, 200, 300})   # False

# 练习1:用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
math = {'张三', '李四', '小花'}
english = {'张三', '王二'}
music = {'张三', '李四', '王二', '小明'}

# 1. 求选课学生总共有多少人
set1 = math | english | music
print('选课学生总人数为:', len(set1))

# 2. 求只选了第一个学科的人的数量和对应的名字
set2 = math - english - music
print('只选了第一个学科的人数为:', len(set2), set2)

# 3. 求只选了一门学科的学生的数量和对应的名字
set3 = (math - english - music)
set4 = (english - math - music)
set5 =(music - english -math)
set6 = set3 | set4 | set5
print('只选了一门学科的学生人数:', len(set6), set6)

# 4. 求只选了两门学科的学生的数量和对应的名字
set7 = set1 - set6 - (math & english & music)
print('只选了两门学生的学生的人数为:', len(set7), set7)


# 5. 求选了三门学生的学生的数量和对应的名字
set5 = math & english & music
print('选了三门学生的学生的人数为:', len(set5), set5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值