可变类型与不可变类型
- 字典以"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