Python学习第五课-字典、集合、序列

可变类型与不可变类型

  • 字典以"key"为索引,key可以是任意不可变类型,通常用字符串或数值。而序列以连续的整数为索引
  • 字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型
    可变和不可变数据的前因
i = 1    # 整数不可变,其他还有str,元组)
print(id(i))  # 140732167000896
i = i + 2
print(id(i))  # 140732167000960

l = [1, 2]   # 列表可变,dict和集合也可变
print(id(l))  # 4300825160
l.append('Python')
print(id(l))  # 4300825160
print(hash('Name'))  # -9215951442099718823

print(hash((1, 2, 'Python')))  # 823362308207799471

print(hash([1, 2, 'Python']))
# TypeError: unhashable type: 'list'

print(hash({1, 2, 3}))
# TypeError: unhashable type: 'set'

字典

在这里插入图片描述

字典的定义

字典 是无序的 键:值(key:value)对集合,键必须是互不相同的(在同一个字典之内)。

  • dict 内部存放的顺序和 key 放入的顺序是没有关系的。
  • dict 查找和插入的速度极快,不会随着 key 的增加而增加,但是需要占用大量的内存。

创建和访问字典

brand = ['李宁', '耐克', '阿迪达斯']
slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing']
print('耐克的口号是:', slogan[brand.index('耐克')])  
# 耐克的口号是: Just do it

dic = {'李宁': '一切皆有可能', '耐克': 'Just do it', '阿迪达斯': 'Impossible is nothing'}
print('耐克的口号是:', dic['耐克'])  
# 耐克的口号是: Just do it

字典的内置方法

"="和copy

dic1 = {'user': 'lsgogroup', 'num': [1, 2, 3]}

# 引用对象
dic2 = dic1  
# 浅拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dic3 = dic1.copy()  

print(id(dic1))  # 1334009359080
print(id(dic2))  # 1334009359080
print(id(dic3))  # 1334009358840

# 修改 data 数据
dic1['user'] = 'root'
dic1['num'].remove(1)

# 输出结果
print(dic1)  # {'user': 'root', 'num': [2, 3]}
print(dic2)  # {'user': 'root', 'num': [2, 3]}
print(dic3)  # {'user': 'lsgogroup', 'num': [2, 3]}

字典习题

1、字典基本操作

字典内容如下:

dic = {
    'python': 95,
    'java': 99,
    'c': 100
    }

用程序解答下面的题目
•字典的长度是多少

dic = { 'python': 95,  'java': 99,'c': 100}
print ("Length : %d" % len (dic))
# Length : 3

•请修改’java’ 这个key对应的value值为98

dic['java'] = 98
print (dic)
# {'python': 95, 'java': 98, 'c': 100}

•删除 c 这个key

print(dic.pop("c"), dic)
# 100 {'python': 95, 'java': 98}

•增加一个key-value对,key值为 php, value是90

dic['php'] = 90
print(dic)
# {'python': 95, 'java': 98, 'php': 90}

•获取所有的key值,存储在列表里

print(dic.keys())  
lst = list(dic.keys())  
print(lst)  
# dict_keys(['python', 'java', 'php'])
# ['python', 'java', 'php']

•获取所有的value值,存储在列表里

print(list(dic.values()))
# [95, 98, 90]

•判断 javascript 是否在字典中

if 'javascript' in dic:
    print("键 javascript 存在")
else:
    print("键  javascript 不存在")
# 键  javascript 不存在

•获得字典里所有value 的和

total = 0
list1 = list(dic.values())
for i in range(0,len(list1)):
    total = total + list1[i]
print("和为:",total)
# 和为: 283

•获取字典里最大的value

max(list1)
# 98

•获取字典里最小的value

min(list1)
# 90

•字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中

dic1 = {'php': 97}
dic.update(dic1)
print(dic)  
# {'python': 95, 'java': 98, 'php': 97}

2、字典中的value

有一个字典,保存的是学生各个编程语言的成绩,内容如下

data = {
        'python': {'上学期': '90', '下学期': '95'},
        'c++': ['95', '96', '97'],
        'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}]
        }

各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict),将分数修改成int类型

def transfer_score(data):
    # your code here

集合

集合要点

Python 中set与dict类似,也是一组key的集合,但不存储value。

num = {}
print(type(num))  # <class 'dict'>
num = {1, 2, 3, 4}
print(type(num))  # <class 'set'>

在这里插入图片描述

集合习题

1.怎么表示只包含1个数字1的元组。

x=(1,)
type(x)
# tuple

2.创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。

s = set()
s.add('x')
s.add('y')
s.add('z')
print(s)
# {'z', 'y', 'x'}

3.列表[‘A’, ‘B’, ‘A’, ‘B’]去重。

LI = ['A', 'B', 'A', 'B']
SE = set(LI)
A = list(SE)
A
# ['B', 'A']

4.求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。

A = {6, 7, 8}
B = {7, 8, 9}
A^B
# {6,9}
A = {6, 7, 8}
B = {7, 8, 9}
A.symmetric_difference(B)

5.求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。

s1={'A', 'B', 'C'}
s2={'B', 'C', 'D'}
len(set.intersection(s1,s2))
# 2

序列

在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持一些通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。

可迭代对象??
在这里插入图片描述

序列习题

1.怎么找出序列中的最大、小值? max,min 函数
2.sort() 和 sorted() 区别
list.sort( key=None, reverse=False)
sort 对列表进行排序,sorted获取已排序列表副本,sorted可对所有可迭代对象进行排序
3.怎么快速求 1 到 100 所有整数相加之和?

result = sum(range(101))
result
# 5050

4.求列表 [2,3,4,5] 中每个元素的立方根。

s1=[2,3,4,5] 

for i in range(0,len(s1)):
     s1[i] = s1[i] ** 3
print (s1)
# [8, 27, 64, 125]

5.将[‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式。

a = ['x','y','z'] 
b = [1,2,3]
zipped = zip(a, b)
print (list(zipped))
#[('x', 1), ('y', 2), ('z', 3)]

学习资料

Datawhale python编程基础 https://github.com/datawhalechina/team-learning-program/tree/master/PythonLanguage

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值