1.麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可变,如果一样,则 X 可变。注释:id为返回某数据的地址
2.便捷方法:用 hash(X),只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。
i = 1
print(id(i)) # 140732167000896
print(hash('Name')) # -9215951442099718823
字典 是无序的 键:值(key:value)对集合,键必须是互不相同的(在同一个字典之内)。
dict 内部存放的顺序和 key 放入的顺序是没有关系的。
dict 查找和插入的速度极快,不会随着 key 的增加而增加,但是需要占用大量的内存。
字典 定义语法为 {元素1, 元素2, …, 元素n}
其中每一个元素是一个「键值对」-- 键:值 (key:value)
关键点是「大括号 {}」,「逗号 ,」和「冒号 :」
大括号 – 把所有元素绑在一起
逗号 – 将每个键值对分开
冒号 – 将键和值分开
dic2 = {
'rice': 35, 'wheat': 101, 'corn': 67}
print(dic2) # {'wheat': 101, 'corn': 67, 'rice': 35}
print(dic2['rice']) # 35
dic = dict()
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
print(dic) #{'a': 1, 'b': 2, 'c': 3}
这种情况下,键只能为字符串类型,并且创建的时候字符串不能加引号,加上就会直接报语法错误。
dic = dict(name='Tom', age=10)
print(dic) # {'name': 'Tom', 'age': 10}
print(type(dic)) #
dic = dict()
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
print(dic) #{'a': 1, 'b': 2, 'c': 3}
dic['a'] = 11
print(dic) # {'a': 11, 'b': 2, 'c': 3}
dic['d'] = 4
print(dic) # {'a': 11, 'b': 2, 'c': 3, 'd': 4}
seq = ('name', 'age', 'sex')
dic1 = dict.fromkeys(seq)
print(dic1)
# {'name': None, 'age': None, 'sex': None}
dic2 = dict.fromkeys(seq, 10)
print(dic2)
# {'name': 10, 'age': 10, 'sex': 10}
dic3 = dict.fromkeys(seq, ('小马', '8', '男'))
print(dic3)
# {'name': ('小马', '8', '男'), 'age': ('小马', '8', '男'), 'sex': ('小马', '8', '男')}
dic = {
'python': 95,
'java': 99,
'c': 100
}
klst=list(dic.keys())
print(klst) # ['python', 'java', 'php']
vlst=list(dic.values())
print(vlst) # [95, 98, 90]
dic = {
'Name': 'Lsgogroup', 'Age': 7}
print(dic.items())
# dict_items([('Name', 'Lsgogroup'), ('Age', 7)])
print(tuple(dic.items()))
# (('Name', 'Lsgogroup'), ('Age', 7))
print(list(dic.items()))
# [('Name', 'Lsgogroup'), ('Age', 7)]
dic = {
'Name': 'Lsgogroup', 'Age': 27}
print("Age 值为 : %s" % dic.get('Age')) # Age 值为 : 27
print("Sex 值为 : %s" % dic.get('Sex', "NA")) # Sex 值为 : NA
print(dic) # {'Name': 'Lsgogroup', 'Age': 27}
dic = {
'Name': 'Lsgogroup', 'Age': 7}
print("Age 键的值为 : %s" % dic.setdefault('Age', None)) # Age 键的值为 : 7
print("Sex 键的值为 : %s" % dic.setdefault('Sex', None)) # Sex 键的值为 : None
print(dic)
# {'Age': 7, 'Name': 'Lsgogroup', 'Sex': None}
# in 检测键 Age 是否存在
if 'Age' in dic:
print("键 Age 存在")
else:
print("键 Age 不存在")
# 检测键 Sex 是否存在
if 'Sex' in dic:
print("键 Sex 存在")
else:
print("键 Sex 不存在")
# not in 检测键 Age 是否存在
if 'Age' not in dic:
print("键 Age 不存在")
else:
print("键 Age 存在")
# 键 Age 存在
# 键 Sex 不存在
# 键 Age 存在
dic = {
'python': 95,
'java': 98,
'c': 100
}
del dic['c']#或dic.pop('c')
print(dic) # {'python': 95, 'java': 98}
dic = {
'Name': 'Zara', 'Age': 7}
print("字典长度 : %d" % len(dic)) # 字典长度 : 2
dic.clear()
print("字典删除后长度 : %d" % len(dic))
# 字典删除后长度 : 0
dic1 = {
1: "a", 2: [1, 2]}
print(dic1.popitem()) # (1, 'a')
print(dic1) # {2: [1, 2]}
# 引用对象
dic2 = dic1
# 浅拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dic3 = dic1.copy()
print(id(dic1)) # 148635574728
print(id(dic2)) # 148635574728
print(id(dic3)) # 148635574344
# 修改 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': 'runoob', 'num': [2, 3]}
dic = {
'Name': 'Lsgogroup', 'Age': 7}
dic2 = {
'Sex': 'female', 'Age': 8}
dic.update(dic2)
print(dic)
# {'Sex': 'female', 'Age': 8, 'Name': 'Lsgogroup'}
字典内容如下:
dic = {
‘python’: 95,
‘java’: 99,
‘c’: 100
}
用程序解答下面的题目
字典的长度是多少
请修改’java’ 这个key对应的value值为98
删除 c 这个key
增加一个key-value对,key值为 php, value是90
获取所有的key值,存储在列表里
获取所有的value值,存储在列表里
判断 javascript 是否在字典中
获得字典里所有value 的和
获取字典里最大的value
获取字典里最小的value
字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
dic = {
'python': 95,
'java': 99,
'c': 100
}
print(len(dic))
dic['java']=98
print(dic)
del dic['c']#或dic.pop('c')
print(dic)
dic.setdefault('php',90)
print(dic)
klst=list(dic.keys())
print(klst)
vlst=list(dic.values())
print(vlst)
if 'javascript' in dic:
print("true")
else:
print('false')
sum=0
for i in vlst:sum+=i
print(sum)
print(max(vlst))
print(min(vlst))
dic1 = {
'php': 97}
dic.update(dic1)
print(dic)
print(list(dic.items()))
3
{‘python’: 95, ‘java’: 98, ‘c’: 100}
{‘python’: 95, ‘java’: 98}
{‘python’: 95, ‘java’: 98, ‘php’: 90}
[‘python’, ‘java’, ‘php’]
[95, 98, 90]
false
283
98
90
{‘python’: 95, ‘java’: 98, ‘php’: 97}
[(‘python’, 95), (‘java’, 98), (‘php’, 97)]
有一个字典,保存的是学生各个编程语言的成绩,内容如下
data = {
‘python’: {‘上学期’: ‘90’, ‘下学期’: ‘95’},
‘c++’: [‘95’, ‘96’, ‘97’],
‘java’: [{‘月考’:‘90’, ‘期中考试’: ‘94’, ‘期末考试’: ‘98’}]
}
各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict),将分数修改成int类型
def transfer_score(data):
data = {
'python': {
'上学期': '90', '下学期': '95'},
'c++': ['95', '96', '97'],
'java': [{
'月考':'90', '期中考试': '94', '期末考试': '98'}]
}
data['python']['上学期']=90
data['python']['下学期']=90
data['c++']=[95,96,97]
data['java'][0]['月考']=90
data['java'][0]['期中考试']=94
data['java'][0]['期末考试']=98
print(data)
{‘python’: {‘上学期’: 90, ‘下学期’: 90}, ‘c++’: [95, 96, 97], ‘java’: [{‘月考’: 90, ‘期中考试’: 94, ‘期末考试’: 98}]}
Python 中set与dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
注意,key为不可变类型,即可哈希的值。
num={
}
print(type(num))
num={
1,2,3,4,5}
print(type(num))
basket = {
'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # {'banana', 'apple', 'pear', 'orange'}
从结果发现集合的两个特点:无序 (unordered) 和唯一 (unique)。
由于 set 存储的是无序集合,所以我们不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值,但是可以判断一个元素是否在集合中。
sums=set()
sums.add('apple')
sums.add('bananle')
print(sums)
print(len(sums))
da={
'li','ayin','li','you'}
sums.update(da)
print(sums)
sums.remove('ayin')
print(sums)
sums.discard('you')
print(sums)
sums.pop()
print(sums)
{‘bananle’, ‘apple’}
2
{‘li’, ‘you’, ‘ayin’, ‘bananle’, ‘apple’}
{‘li’, ‘you’, ‘bananle’, ‘apple’}
{‘li’, ‘bananle’, ‘apple’}
{‘bananle’, ‘apple’}
a = frozenset(range(10)) # 生成一个新的不可变集合
print(a)
# frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
b = frozenset('lsgogroup')
print(b)
# frozenset({'g', 's', 'p', 'r', 'u', 'o', 'l'})
怎么表示只包含⼀个数字1的元组。
创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。
列表[‘A’, ‘B’, ‘A’, ‘B’]去重。
求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。
求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。
m=(1,)
print(type(m))
se=set()
se.add('x')
se.add('y')
se.add('z')
print(se)
print(set(['A', 'B', 'A', 'B']))
ab={
6,7,8}
ac={
7,8,9}
print(ab^ac)
bb={
'A', 'B', 'C'}
bc={
'B', 'C', 'D'}
print(len(bb&bc))
{‘y’, ‘z’, ‘x’}
{‘B’, ‘A’}
{9, 6}
2
概念:在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持一些通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
num=[1,2,3,4,5]
a=sum(num,20)
print(a) # 35
x = [-8, 99, 3, 7, 83]
print(sorted(x)) # [-8, 3, 7, 83, 99]
print(sorted(x, reverse=True)) # [99, 83, 7, 3, -8]
s = 'lsgogroup'
x = reversed(s)
print(list(x)) # ['p', 'u', 'o', 'r', 'g', 'o', 'g', 's', 'l']
a=['x','y','z']
b=[1,2,3]
c=list(zip(a,b))
print(c) #[('x', 1), ('y', 2), ('z', 3)]
d=enumerate(c)
print(list(d)) #[(0, ('x', 1)), (1, ('y', 2)), (2, ('z', 3))]
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
zipped = zip(a, b)
print(zipped) #
print(list(zipped)) # [(1, 4), (2, 5), (3, 6)]
zipped = zip(a, c)
print(list(zipped)) # [(1, 4), (2, 5), (3, 6)]
a1, a2 = zip(*zip(a, b))
print(list(a1)) # [1, 2, 3]
print(list(a2)) # [4, 5, 6]
a = [1, 2, 3]
b = [4, 5, 6]
a1= zip(*zip(a, b))
print(list(a1)) # [1, 2, 3]
print(*zip(a, b))
print(list(zip(a, b)))
`[(1, 2, 3), (4, 5, 6)]
(1, 4) (2, 5) (3, 6)
[(1, 4), (2, 5), (3, 6)]
[(1, 2, 3), (4, 5, 6)] (1, 4) (2, 5) (3, 6) [(1, 4), (2, 5), (3, 6)]
怎么找出序列中的最⼤、⼩值?
sort() 和 sorted() 区别
怎么快速求 1 到 100 所有整数相加之和?
求列表 [2,3,4,5] 中每个元素的立方根。
将[‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式。
print(max(1, 2, 3, 4, 5)) # 5
print(min(1, 2, 3, 4, 5)) # 1
2…
x = [-8, 99, 3, 7, 83]
print(sorted(x)) #[-8, 3, 7, 83, 99]
x.sort()
print(x) #[-8, 3, 7, 83, 99]
`print(sum(range(101)))` #5050
.temp=[]
for i in [2,3,4,5]:
if i not in temp:
temp.append(i**3)
print(temp) #[8, 27, 64, 125]
a=['x','y','z']
b=[1,2,3]
c=list(zip(a,b))
print(c) #[('x', 1), ('y', 2), ('z', 3)]