Python 三目运算符 ,dict , set ,四种容器型数据对比(3.10)

1.之前的遗留知识(推导式,三目运算符)

练习:给定数组,奇数乘以2,偶数就对2整除
tips:利用推导式,以及三目运算符
nums2=[19,80,76,4,3]
result2=[x*2 if x%2 else x//2 for x in nums2]
print(result2)
利用推导式进行筛选
nums3=[23,43,44,55,66]
result3=[x for x in nums3 if x%2]
print(result3)

2.dict

1. 增、改

字典[key] = 值 - 当key存在的时候就是修改指定key对应的值,
当key不存在的时候添加键值对
dog = {'name': '财财', 'age': 2, 'breed': '土狗'}
print(dog)     # {'name': '财财', 'age': 2, 'breed': '土狗'}

dog['gender'] = '母狗'
print(dog)      # {'name': '财财', 'age': 2, 'breed': '土狗', 'gender': '母狗'}

dog['breed'] = '中华田园犬'
print(dog)      # {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}

1) del 字典[key] - 删除字典中指定key对应的键值对
dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
del dog['gender']
print(dog)      # {'name': '财财', 'age': 2, 'breed': '中华田园犬'}
2) 字典.pop(key) - 取出字典中指定key对应的值
dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
result = dog.pop('age')
print(dog, result)      # {'name': '财财', 'breed': '中华田园犬', 'gender': '母狗'} 2

3.字典相关操作

1)字典不支持+、* 和 比较大小,只支持比较是否相等的运算
2)in 和 not in - 判断字典中是否存在指定的key
print('a' in {'name': 'a', 'age': 18})   # False
print('name' in {'name': 'a', 'age': 18})       # True
3)dict、len
dict(数据) - 将数据转换成字典
a. 数据必须是序列
b. 序列中元素必须是小序列, 而且小序列有且只有两个元素,第一个元素必须是不可变的
list1 = [(10, 20), 'ab', range(2)]
print(dict(list1))   # {10: 20, 'a': 'b', 0: 1}

#将字典转化为列表类型时,列表里只保存键
dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
result = list(dog)
print(result)   # ['name', 'age', 'breed', 'gender']

print(len(dog))     # 4

4.字典推导式

{表达式1:表达式2 for 变量 in 序列}
{表达式1:表达式2 for 变量 in 序列 if 条件语句}
dict(表达式 for x in 序列) - 表达式必须是有且只有两个元素的序列,第一个元素必须是不可变的
result = {x: x**2 for x in range(3)}
print(result)       # {0:0, 1:1, 2:4}

result = {x: None for x in ['name', 'age', 'gender']}
print(result)       # {'name': None, 'age': None, 'gender': None}

result = {x: x//2 for x in range(11, 20) if x % 2 == 0}
print(result)       # {12:6, 14:7, 16:8, 18:9}

dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
result = {dog[x]: x for x in dog}
print(result)       # {'财财': 'name', 2: 'age', '中华田园犬': 'breed', '母狗': 'gender'}

result = dict((dog[x], x) for x in dog)
print(result)       # {'财财': 'name', 2: 'age', '中华田园犬': 'breed', '母狗': 'gender'}

5.字典相关方法

1) 字典.clear() - 清空字典
dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
dog.clear()
print(dog)      # {}
字典.copy() - 复制字典产生一个一模一样的新字典
dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
dog1 = dog
dog2 = dog.copy()
print(dog1)     # {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
print(dog2)     # {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}

dog.clear()
print(dog, dog1, dog2)        # {} {} {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}

3) (了解)dict.fromkeys(序列) - 创建一个字典,将序列中所有的元素作为字典key,值默认都是None
result = dict.fromkeys('abcd')
print(result)   # {'a': None, 'b': None, 'c': None, 'd': None}

result = dict.fromkeys(['name', 'age', 'gender'], 100)
print(result)       # {'name': 100, 'age': 100, 'gender': 100}
4) values、keys、items
字典.values() - 获取字典中所有的值;返回的不是列表另是一种序列
字典.keys() - 获取字典中所有的键;返回的不是列表另是一种序列
字典.items() - 获取字典中键值对;返回的时候序列,序列中的元素是每个键值对对应的元组
dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
result = dog.values()
print(result)       # dict_values(['财财', 2, '中华田园犬', '母狗'])
print(list(result))

print(dog.keys())       # dict_keys(['name', 'age', 'breed', 'gender'])

print(dog.items())      # dict_items([('name', '财财'), ('age', 2), ('breed', '中华田园犬'), ('gender', '母狗')])
print('===========================================================')
for x in dog.items():
    print(x)

print('===========================================================')
for x, y in dog.items():
    print('x:', x, 'y:', y)

5) 字典.setdefault(key, value) - 在字典中添加键值对(不会在key存在的时候进行修改操作)
dog = {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗'}
dog.setdefault('weight', 20)
print(dog)      # {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗', 'weight': 20}

dog.setdefault('name', '小黑')
print(dog)      # {'name': '财财', 'age': 2, 'breed': '中华田园犬', 'gender': '母狗', 'weight': 20}
6)字典.update(序列) - 将序列中所有的元素作为键值对添加到字典中。
序列必须是可以转换成字典的序列
字典1.update(字典2) - 将字典2中的键值对全部添加到字典1中
dict1 = {'a': 10}
dict1.update({'b': 20, 'c': 30})
print(dict1)        # {'a': 10, 'b': 20, 'c': 30}

dict1.update(['ab', ('name', '张三'), ['age', 100]])
print(dict1)

3.set

1集合(set)

集合是容器型数据类型:将{}作为容器的标志,多个元素之间用逗号隔开:{元素1,元素2,元素3…}
集合是可变的
集合是无序的
元素:a.必须是不可变的数据
b.元素是唯一的
# 注意:{}不是空集合,是空字典
set1={}
print(type(set1)) #<class 'dict'>
set1=set()
print(type(set1),len(set1)) #<class 'set'> 0

#集合是无序的
print({1,2,3}=={2,1,3}) #True

#集合的元素必须是是不可变的类型的数据
set2={'abc',123,(2,3)}
print(set2)
# set2={'abc',123,[2,3]}# 元素可变会报错 TypeError: unhashable type: 'list'

#集合的元素是唯一的
set4={10,20,30,20,10}
print(set4) #{10, 20, 30}
#集合自带去重,只能去元素是不可变的元素的重
names=['123','34','123','34']

print(list(set(names))) #['123', '34']

2.增删改查

1)查 :遍历
boll={'乒乓球','篮球','羽毛球','高尔夫','网球'}
for x in boll:
    print(x)
2)增:
集合.add(元素) - 集合中添加指定元素
集合.update(序列)- 将序列中的元素全部添加到集合中
boll.add('足球') #{'高尔夫', '网球', '乒乓球', '羽毛球', '足球', '篮球'}
print(boll)
set5=set()
set5.update('abd')
print(set5) #{'a', 'd', 'b'}

set5.update({'name':'CYT','age':18})
print(set5) #{'name', 'age', 'd', 'a', 'b'}
3)删:
集合.remove(元素) 删除指定元素,如果元素不存在,会报错
集合.discard(元素) 删除指定元素,如果元素不存在,不会报错
boll={'乒乓球','篮球','羽毛球','高尔夫','网球'}
boll.remove('高尔夫')
print(boll) #{'乒乓球', '篮球', '羽毛球', '网球'}

boll.discard('网球')
print(boll)

# boll.remove('桌球') #KeyError: '桌球'
boll.discard('桌球')
4)改:
不能直接修改某个元素,只能先删再加

4.四种容器型数据对比总结

列表字典元组集合
类型名listdicttupleset
容器标志[n1,n2,n3,…]{‘键1’:‘值1’}(n1,n2,n3,…){n1,n2,n3,…}
容器的特点可变,有序可变,无序不可变,有序可变,无序
增删改查1.增:append,insert
2.删:del,remove,pop
3.改:list1[下标]=值
4.查:
a:list1[下标]
b:list1[开始下标:结束下标:步长]
c:遍历
1.增:字典[key]=值,setdefault(key,value)
2.删:del,pop
3.改:字典[key]=值
4.查:
a:字典[key]
b:字典.get(‘key’)
c:遍历
1.查:同列表
2.多个变量方法(用于赋值等)
1.增:add,update
2.删:remove,discard
3.查:遍历
4.数学集合运算:|,&,-,^,>,<,>=,<=
相关操作+,*,比较大小,比较相等,in,not in,max,min,sum,list,len比较相等,in,not in,dict,len同列表比较相等,in,not in,max,min,set,len
相关方法list.append()
list.insert()
list.extend()
list.pop()
list.remove()
list.clear()
del list1[]
list[n]=x
list.count(元素)
list.index(元素)
dict.setdefault(key,value)
dict.get()
dict.copy()
dict.update()
del dict[key]
dict.clear()
dict.keys()
dict.values()
dict.items()
tuple.clear()
tuple.copy()
tuple.count(元素)
tuple.index(元素)
不管
怎么选择保存多个意义相同的数据保存多个意义不同的数据保存不能被修改的多个数据涉及去重,集合运算

5.作业

1.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字

Chinese = {'小猪', '佩奇', '乔治', '山羊'}
math = {'小猪', '佩奇', '小乔 ', '小治', '奇奇', }
English = {'佩奇', '奇奇', '犬夜叉', '桔梗', '杀生丸', }
#a
set1=Chinese|math|English
# print(set1)
print('总共有{}个学生选课'.format(len(set1)))
#b
set2=Chinese-math-English
# set22=(Chinese^math^English)-Chinese&math&English
print('{}个学生只选了第一门课,有:{}'.format(len(set2),set2))
#c
set3=(Chinese-math-English)|(math-Chinese-English)|(English-Chinese-math)
print('{}个学生只选了一门课,有:{}'.format(len(set3),set3))
#e
set5=Chinese&math&English
print('{}个学生选了三门课!有:{}'.format(len(set5),set5))
#d
set4=set1-set3-set5
print('{}个学生选了两门课!有:{}'.format(len(set4),set4))

结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值