元组和字典
1.元组
元组和列表相似,不同之处在于元组的元素不能被修改,元组使用小括号。
创建元组只需在括号中添加元素,并使用逗号隔开,注意,当元组中只有一个元素时,后面需添加一个逗号,否则会被当做运算符使用。
tup1=('python','hello',2000)
tup2=(2,)
tup3=() #空元组
print(type(tup1)) 得到<class 'tuple'>
元组的运算符
Python 表达式 | 结果 | 描述 |
---|---|---|
len((1, 2, 3)) | 3 | 计算元素个数 |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接 |
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 复制 |
3 in (1, 2, 3) | True | 元素是否存在 |
for x in (1, 2, 3): print (x,) | 1 2 3 | 迭代 |
元组内置函数
序号 | 方法及描述 | 实例 |
---|---|---|
1 | len(tuple) 计算元组元素个数。 | >>> tuple1 = ('Google', 'Runoob', 'Taobao') >>> len(tuple1) 3 >>> |
2 | max(tuple) 返回元组中元素最大值。 | >>> tuple2 = ('5', '4', '8') >>> max(tuple2) '8' >>> |
3 | min(tuple) 返回元组中元素最小值。 | >>> tuple2 = ('5', '4', '8') >>> min(tuple2) '4' >>> |
4 | tuple(seq) 将列表转换为元组。 | >>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu'] >>> tuple1=tuple(list1) >>> tuple1 ('Google', 'Taobao', 'Runoob', 'Baidu') |
字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
(1)访问字典
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
#输出得到
dict['Name']:Runoob
(2)修改字典
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dict['Age']=8
print (dict)
#得到
{'Name': 'Runoob', 'Age': 7, 'Class': 'First','Age':8}
(3)删除字典元素
能删单一的元素也能清空字典
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键 'Name'
dict.clear() # 清空字典
del dict # 删除字典
但这会引发一个异常,因为用执行 del 操作后字典不再存在
(4)字典键的特性
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
Python字典包含了以下内置方法:
序号 | 函数及描述 |
---|---|
1 | radiansdict.clear() 删除字典内所有元素 |
2 | radiansdict.copy() 返回一个字典的浅复制 |
3 | radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | key in dict 如果键在字典dict里返回true,否则返回false |
6 | radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | radiansdict.keys() 以列表返回一个字典所有的键 |
8 | radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | radiansdict.values() 以列表返回字典中的所有值 |
11 | pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)。 |
练习:
将上次的通讯管理系统修改为字典模式:
phones={'1399413914':'帅比'}
while True:
print('== == == =通讯录管理系统 == == == =')
print('1.增加姓名和手机')
print('2.删除姓名')
print('3.修改手机')
print('4.查询所有用户')
print('5.根据姓名查找手机号')
print('6.退出')
print('== == == == == == == == == == == == == ==')
i=int(input('请选择:'))
if i==1:
name=input('请输入姓名:')
phone=input('请输入电话号码:')
while phone in phones.keys():
phone=input('电话号码已存在,请重新输入:')
phones[phone]=name
print('收录完成')
elif i==2:
name=input('请输入要删除的姓名:')
for item in phones.items():
if item[1].__eq__(name):
phones.pop('name')
print('删除成功')
else:
print('您删除的姓名不存在')
elif i==3:
phone=input('请输入要修改的手机号码:')
if phone in phones.keys():
phone1 = input('请输入修改后的手机号:')
while phone1 in phones.keys():
phone1=input('您输入的手机号已存在,请重新输入:')
a=phones.pop(phone)
phones[phone1]=a
print('修改成功')
else:
print('您要修改的手机号不存在,请重新输入')
elif i==4:
for a,b in phones.items():
print('姓名:'+str(b)+' '+'电话:'+str(a))
elif i==5:
name=str(input('请输入要查找的姓名:'))
if name in phones.values():
for j in phones.items():
if j[1].__eq__(name):
print('您查找的手机号为:',j[0])
else:
print('您输入的姓名有误')
elif i==6:
print('谢谢使用')
break