今日内容
列表的内置方法
注意:列表内置方法之后产生的不是新的值,而是修改的本身
- 取值
l1 = [11, 22, 33, 44, 55, 66]
print(l1[0]) # 11
print(l1[-1]) # 66 负号控制方向
切片取值:
l1 = [11, 22, 33, 44, 55, 66]
print(l1[0:4]) # [11, 22, 33, 44]
print(l1[-3:-1]) # [44, 55]
print(l1[0:4:2]) # [11, 33] 第三个数2代表的是间隔取值数
重要掌握的内置方法
-
.append
在列表的尾部增加一个数据值,注意这里你加入的数据值是以一个数据值加在尾部的
eg:
l1 = [11, 22, 33, 44, 55, 66]
l1.append([1, 2, 3])
print(l1) # 输出结果:[11, 22, 33, 44, 55, 66, [1, 2, 3]]
你加的值是以单个数据值加入的
-
.insert
在任意位置增加一个数据值
eg:
l1 = [11, 22, 33, 44, 55, 66]
l1.insert(0, 45) # 0代表的是位置,45代表的是增加数据值
print(l1) # 输出结果:[45, 11, 22, 33, 44, 55, 66]
l1.insert(0, [1, 2, 3])
print(l1) # 输出结果:[[1, 2, 3], 11, 22, 33, 44, 55, 66]
这种增加方式也是以单个数据值增加的
-
.extent
也是增加元素的内置方法,但是这里与上面两种不同的区别就是,extent可以加入数据值的时候,会以数据值里的单个元素,分别加入到列表。
eg:
l1 = [11, 22, 33, 44, 55, 66]
l1.extend([1, 2, 3])
print(l1) # 输出结果:[11, 22, 33, 44, 55, 66, 1, 2, 3]
这种方法是加到末尾的
extent方法也可以理解成是for + append
eg:
l2 = [1, 2, 3]
l1 = [11, 22, 33, 44, 55, 66]
for i in l1:
l2.append(i) # 在l2中加i的值
print(l2) # 输出结果:[1, 2, 3, 11, 22, 33, 44, 55, 66]
-
del
根据索引值删除元素
eg:
l1 = [11, 22, 33, 44, 55, 66]
del l1[0] # 根据索引值删除
print(l1) # 输出结果:[22, 33, 44, 55, 66]
-
.pop
也是删除元素,并且删除的数据还可以被使用一下
eg:
l1 = [11, 22, 33, 44, 55, 66]
l1.pop(2) # 根据索引值删除
print(l1) # 输出结果:[11, 22, 44, 55, 66]
当我们不给索引值的时候,是默认删除末尾的数据值
eg:
l1 = [11, 22, 33, 44, 55, 66]
l1.pop() # 不给索引值,默认删除末尾值
print(l1) # 输出结果:[11, 22, 33, 44, 55]
-
.remove
指名删除
eg:
l1 = [11, 22, 33, 44, 55, 66]
l1.remove(22) # 指明删除22
print(l1) # 输出结果:[11, 33, 44, 55, 66]
了解的内置方法
-
.count
统计某个数据出现的次数
eg:
l1 = [11, 33, 44, 11, 55, 22, 33, 44, 55, 66]
print(l1.count(33)) # 输出结果:2
-
.reverse
反转的意思,就是180°翻转
eg:
l1 = [11, 33, 44, 11, 55, 22, 33, 44, 55, 66]
l1.reverse()
print(l1) # 输出结果:[66, 55, 44, 33, 22, 55, 11, 44, 33, 11]
-
.sort
从低到高依次排序
eg:
l1 = [11, 33, 44, 11, 55, 22, 33, 44, 55, 66]
l1.sort()
print(l1) # 输出结果:[11, 11, 22, 33, 33, 44, 44, 55, 55, 66]
对应,也会有升序的排列
eg:
l1 = [11, 33, 44, 11, 55, 22, 33, 44, 55, 66]
l1.sort(reverse=True) # 升序
print(l1) # 输出结果:[66, 55, 55, 44, 44, 33, 33, 22, 11, 11]
-
.index
查找某个数据值所在的索引值
eg:
l1 = [11, 33, 44, 11, 55, 22, 33, 44, 55, 66]
print(l1.index(33)) # 输出结果:1
元组的内置方法
- 类型转换
能被for循环支持的数据类型都可以转换成元组
print(tuple('123')) # ('1', '2', '3')
print(tuple([[1, 2], 3, 4, 5])) # ([1, 2], 3, 4, 5)
print(tuple('hello')) # ('h', 'e', 'l', 'l', 'o')
关于元组有一个情况需要注意
当元组里只有一个数据值的时候会,我们一定要在数据值后面加一个逗号,否则,括号里是什么数据类型就是什么数据类型。
举例说明:
eg:
l1 = (1)
print(type(l1)) # 输出结果:<class 'int'>
l1 = (1,) # 这里就加了一个逗号,数据类型就发生了变化
print(type(l1)) # 输出结果:<class 'tuple'>
- 索引取值
eg:
l1 = (1,2,3,4,5)
print(l1[1]) # 输出结果:2
- 统计元组内数据值的个数
eg:
l1 = (1, 2, 3, 4, 5)
print(len(l1)) # 输出结果:5
- 改
元组是不能改的
元组的索引是不会改变绑定的地址
当元组里有别的数据类型的时候:
eg:
l1 = (1, 2, 3, 4, 5, [11, 22, 33, 44, 55, 66])
l1[-1][3] = 666 # 这里我们找的值是列表的值
print(l1) # 输出结果:(1, 2, 3, 4, 5, [11, 22, 33, 666, 55, 66])
字典的内置方法
其实字典很少用到数据类型的转换
字典中K值一般为字符串,只要为不可变数据类型就ok
字典中,K:V键值对是无序的
- 取值
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
print(l1.get('name')) # 输出结果:jason
建议大家使用这种方法,减少报错。
- 修改数据
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
l1['name'] = 'kevin' # 修改K值对应的V值
print(l1) # 输出结果:{'name': 'kevin', 'pwd': 123, 'hobby': 'read'}
健在则为修改
- 新增数据
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
l1['age'] = 21
print(l1) # 输出结果:{'name': 'jason', 'pwd': 123, 'hobby': 'read', 'age': 21}
健不在则为新增
- 删除数据
.pop
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
l1.pop('name')
print(l1) # 输出结果:{'pwd': 123, 'hobby': 'read'}
res = l1.pop('name')
print(res) # jason
del
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
del l1['name'] # 删除对应的V值
print(l1) # 输出结果:{'pwd': 123, 'hobby': 'read'}
.popitem
随机删除
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
l1.popitem()
print(l1) # {'name': 'jason', 'pwd': 123}
- 修改数据
.update
健在为修改,健不在则为新增
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
l1.update({'name': 'kevin'}) # 健在为修改
print(l1) # {'name': 'kevin', 'pwd': 123, 'hobby': 'read'}
eg2:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
l1.update({'name2': 'kevin'}) # 健不在则为新增
print(l1) # {'name': 'jason', 'pwd': 123, 'hobby': 'read', 'name2': 'kevin'}
-
快速构造字典
关键字:fromkeys
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
res = l1.fromkeys([1, 2, 3], 2344453454546)
print(res) # {1: 2344453454546, 2: 2344453454546, 3: 2344453454546}
- 快速获取键值对
K值
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
res = l1.keys()
print(res) # dict_keys(['name', 'pwd', 'hobby'])
V值
eg:
l1 = {'name': 'jason', 'pwd': 123, 'hobby': 'read'}
res = l1.values()
print(res) # dict_values(['jason', 123, 'read'])
集合的内置转换
- 数据转换
能被for循环支持的数据类型都可以转换为集合
- 去重
eg:
l1 = {1, 2, 3, 3, 4, 3, 2, 3, 4, 1, 3, 4, 3, 4, 5, 5}
print(l1) # 输出结果:{1, 2, 3, 4, 5}
- 关系运算
print({1, 2, {'name': 'jason'}})
报错
模拟qq共同好友的情况
有两组数据:
pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
linuxs = {'kermit', 'tony', 'gangdan'}
print(pythons & linuxs) # 两个的共同好友
print(pythons | linuxs) # 所有的名字
print(pythons - linuxs) # 第一组数据独有的名字
print(pythons ^ linuxs) # 在两组数据中没有同时出现的数据
不可变类型和可变类型
不可变类型 | 可变类型 |
---|---|
字符串,整型,浮点型,元组 | 字典,列表,集合 |
值改变,内存地址也改变 | 值改变,内存地址不改变 |
今日作业
作业一
1.利用列表编写一个员工姓名管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
ps:思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名 (能写就写 不会没有关系)
l1 = ['jason|123', 'kevin|321', 'tony|234']
while True:
username = input('请输入你的登录用户名:').strip() # 输入然后去除首尾的空格
password = input('请输入你的密码:').strip()
for date in l1: # for循环data在l1里取值
name, pwd = date.split('|') # 以|为标识间隔开,为列表
if username.lower() == name and password == pwd:
print('登录成功')
break
else:
print('用户名或密码错误')
continue
while True:
order = input('请输入你的指令:')
if order == '1':
i = input('请输入你需要添加的员工信息:')
l1.append(i) # 在l1里新增一个i值
print(i)
continue
elif order == '2':
print(l1)
continue
elif order == '3':
i = input('请输入你要辞退的员工信息:')
l1.remove(i) # 在l1里删除i值
print(i)
continue
else:
res = input('其他指令为退出,是否退出?(y/q)')
if res == 'y':
print('不小心输错了')
continue
else:
print('退出成功')
break
break
作业二
2.去重下列列表并保留数据值原来的顺序
eg: [1,2,3,2,1] 去重之后 [1,2,3]
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
k = [] # 我们先设置一个空列表
l1 = [2, 3, 2, 1, 2, 3, 2, 3, 4, 3, 4, 3, 2, 3, 5, 6, 5]
for i in l1: # for循环取值
if i not in k: # 判断,如果i不在k列表里面,则进行下一步
k.append(i) # 如果i不在k列表里面就增加进去
print(k)
作业三
3.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={‘jason’,‘oscar’,‘kevin’,‘ricky’,‘gangdan’,‘biubiu’}
linuxs={‘kermit’,‘tony’,‘gangdan’}
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
linuxs = {'kermit', 'tony', 'gangdan'}
print(pythons & linuxs) # 两个的共同好友
print(pythons | linuxs) # 所有的名字
print(pythons - linuxs) # 第一组数据独有的名字
print(pythons ^ linuxs) # 在两组数据中没有同时出现的数据