No.5字典
No.5
今日概要
- 字典
- 重点
内容回顾和补充
-
int
- py2 / py3
- 除法
- 强制转换:
- int(str) 【重要】
- int(bool)
-
bool
-
强制转换:
-
bool(int) 只有0是False
-
bool(str) 只有空字符串是False
-
bool(list) 只有空列表是False
-
bool(tuple) 只有空元组是False
-
-
-
str
- 独有功能:upper/lower/split/strip/replace/isdigit/stattswith/endswith/format/join/encode
- 公共功能:
- 长度
- 索引
- 切片
- 步长
- 遍历
- 无删除
- 无修改
- 强制转换:
- str(int)
- str(True)
- str(['哇哈哈', 'AD钙奶']) → " ['哇哈哈', 'AD钙奶'] " 要实现拼接使用 ''.join(['哇哈哈', 'AD钙奶'])
- str(tuple) → 同列表方法,使用''.join(tuple)
-
list
- 独有功能:append/insert/pop/remove/clear/extend
- 公共功能:
- 长度
- 索引
- 切片
- 步长
- 遍历
- 删除
- 修改
- 强制换换:
- list(str) 无太多意义
- list(tuple)
-
tuple
- 独有功能:无
- 公共功能:
- 长度
- 索引
- 切片
- 步长
- 遍历
- 无删除
- 无修改
- 强制转换:
- tuple(str) 无太多意义
- tuple(list)
-
总结
-
常见的类型转换
# 字符串数字互转 #列表元组互转 #其它转布尔值为False,只有0 "" [] ()习题 nums = [11,22,33,44] for i in range(0,len(nums)): nums[i] = str(nums[i]) result = '_'.join(nums) print(result) #注意''.join(字符串/容器内元素必须是字符串)
-
内容详细
1.字典
请表示:姓名张三 / 年龄18 / 性别男 / 爱好武术
#A同学
name = '张三'
age = 18
gender = '男'
hobby = '武术'
#B同学
data = '张三,18,男,武术'
#C同学
data_list = ['张三','18','男','武术']
请输出:他的名字叫张三,他的年龄是18岁,性别男爱好武术。
#如果用以上方式虽然可以储存信息,但当信息量成千上万时就不可取了。
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} #键值
info['name']
inof['age']
userinfo = {'username':'alex','password':'123'}
user = input('请输入用户名:')
pwd = input('请输入密码:')
if userinfo['username'] == user and userinfo['password']== pwd:
print('登陆成功')
else:
print('用户名或密码错误')
字典是为了帮助用户去表示一个事物的信息(事物有多个属性),在py3.6版本之前的字典都是无序的。
-
独有功能
-
.keys() 获取字典中所有的键。
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} info.keys() #获取所有的键 for item in info.keys(): print(item) -
.values() 获取字典中所有的值。
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} info.values() #获取所有的值 for item in info.values(): print(item) -
.items() 获取字典中所有的键值对。
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} info.items() #获取所有的键值对 for v1,v2 in info.items(): print(v1,v2)
-
-
公共功能
-
len
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} print(len(info)) -
索引
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} info['name'] info['age'] -
切片【无】
-
步长【无】
-
for
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} for i in info: print(info) #循环字典本身只取键 for item in info.keys(): print(v1,v2) for item in info.values(): print(v1,v2) for v1,v2 in info.items(): print(v1,v2) -
修改(存在就修改,不存在就增加)
#改值 info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} info['age'] = 19 print(info) #改键 无法直接改只能通过先删除后再添加间接改。 del info['hobby'] info['a'] = b -
删除
info = {'name':'张三','age':18,'gender':'男','hobby':'武术'} del info['name'] print(info)
-
2.重点
- int
- bool
- str
- list
- tuple
- dict
4.数据补充
循环添加
lst = [1,2,3,4,5,6]
for i in lst:
lst.append(7) # 这样写法就会一直持续添加7
print(lst)
lst = [1,2,3,4,5,6]
n = 0
for i in lst:
lst.append(7)
print(lst)
n += 1
if n > 11:
break
print(lst)
循环删除
lst = [11, 22, 33, 44]
for i in lst:
lst.remove(i)
print(lst)
结果:
[22, 44]
#分析原因: for的运行过程中会有一个指针来记录当前循环的元素是哪一个, 一开始这个指针指向第0个,然后获取到第0个元素,紧接着删除第0个元素;这个时候原来的第一个元素会自动的变成第0个,然后指针向后移动一次指向第1个元素。这时原来的1已经变成了0, 也就不会被删除了。
lst = [11, 22, 33, 44]
for i in range(0,len(lst)):
del lst[i]
print(lst)
结果:
报错
#分析原因:当i=2的时候,列表只剩[22,44],但是这个时候删除的是lst[2],肯定报错啊。
lst = [11, 22, 33, 44]
for i in lst:
lst.pop()
print(lst)
结果:
[11, 22]
#分析原因:当i=lst[2]的时候,列表只剩[11,22],表示循环结束。
- 经过分析发现,用remove、del、pop都无法实现循环删除。
#结合range和pop成功完成
lst = [11, 22, 33, 44]
for i in range(len(lst)):
lst.pop()
print(lst)
#用另一个列表来记录你要删除的内容,然后实现循环删除
lst = [11, 22, 33, 44]
lst2 = []
for i in lst:
lst2.append(i)
print(lst2)
for i in lst2:
lst.remove(i)
print(lst)
- 由于删除元素会导致元素的索引改变,所以容易出现问题。尽量不要在循环中直接去删除元素。可以把要删除的元素添加到另一个列表中然后再批量删除。

浙公网安备 33010602011771号