第五天 字典、集合、序列

一、字典

1.如何快速判断一个数据类型 X 是不是可变类型的呢?

两种方法:

麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可变,如果一样,则 X 可变。
便捷方法:用 hash(X),只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。

2.字典的内置方法

dict.fromkeys(seq[, value]) 用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
【例子】

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', '男')}

dict.keys()返回一个可迭代对象,可以使用 list() 来转换为列表,列表为字典中的所有键。

二、练习题

1、字典基本操作

字典内容如下:

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']
print(dic)
dic.setdefault('php', 90)
print(dic)
lst1 = list(dic.keys())
print(lst1)
lst2 = list(dic.values())
print(lst2)
print('javascript' in dic)
print(sum(lst2))
print(max(lst2))
print(min(lst2))
dic1 = {'php': 97}
dic.update(dic1)
print(dic)

三、集合

1.集合的创建

先创建对象再加入元素。
在创建空集合的时候只能使用s = set(),因为s = {}创建的是空字典。
注:可以使用len()內建函数得到集合的大小

2.集合的内置方法

  • set.add(elmnt)用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
  • set.remove(item) 用于移除集合中的指定元素。如果元素不存在,则会发生错误。
  • set.discard(value) 用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而
    discard() 方法不会。
  • set.pop() 用于随机移除一个元素。
    3.不可变集合

Python 提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset。需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。

  • frozenset([iterable]) 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

四、练习题:

怎么表示只包含⼀个数字1的元组。
创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。
列表[‘A’, ‘B’, ‘A’, ‘B’]去重。
求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。
求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。

# 1.怎么表示只包含⼀个数字1的元组
>>>a=(1,)

#2.创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。
b=set()
b.add('x')
b.add('y')
b.add('z')
#3.列表['A', 'B', 'A', 'B']去重
c=['A','B','A','B']
d=set(c)

#4.求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)
e={6,7,8}
f={7,8,9}
e1=set(e)
f1=set(f)
g=(e1|f1)-(e1&f1)#(e并f)-(e交f)

#5.求{'A', 'B', 'C'}中元素在 {'B', 'C', 'D'}中出现的次数
dic1={'A','B','C'}
dic2={'B','C','D'}
set1=list(dic1)
set2=list(dic2)
for i in range(0,len(set1)):
    count=0
    if set1[i] in set2:
        count+=1
    print(set1[i],'在第二个集合中出现的次数为',count)
    continue

五、序列

1.针对序列的内置函数

  • list(sub) 把一个可迭代对象转换为列表。
  • tuple(sub) 把一个可迭代对象转换为元组。
  • str(obj) 把obj对象转换为字符串
  • len(s) 返回对象(字符、列表、元组等)长度或元素个数。
  • max(sub)返回序列或者参数集合中的最大值 min(sub)返回序列或参数集合中的最小值
  • sum(iterable[, start=0]) 返回序列iterable与可选参数start的总和。
  • sorted(iterable, key=None, reverse=False) 对所有可迭代的对象进行排序操作。 iterable
    – 可迭代对象。
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

r

  • everse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 返回重新排序的列表。
  • reversed(seq) 函数返回一个反转的迭代器。seq – 要转换的序列,可以是 tuple, string, list 或 range。

六、练习题:

怎么找出序列中的最⼤、⼩值?
sort() 和 sorted() 区别
怎么快速求 1 到 100 所有整数相加之和?
求列表 [2,3,4,5] 中每个元素的立方根。
将[‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式

猜你喜欢

转载自blog.csdn.net/weixin_46755974/article/details/107721657