总结
一、listMethod
1、列表.clear()
清空列表(删除列表中所有的元素)
nums = [1, 2, 3, 4, 5]
nums.clear()
print(nums) # []
# 不推荐
# nums = [1, 2, 3, 4, 5]
# nums = []
# print(nums)
2、列表.copy()
复制原列表产生一个一模一样的新列表并返回新列表
列表[:]、列表+[]、列表*1的功能和 列表.copy()的功能一模一样
id(变量) - 获取变量中保存的地址
变量保存数据其实是报错的数据在内存中的地址
nums = [1, 2, 3, 4, 5] print('nums', id(nums)) # nums 39379456
将nums中保存的数据的地址赋值给num3
num3 = nums print(num3) # [1, 2, 3, 4, 5] print('num3', id(num3)) # num3 39379456
复制nums中地址对应的数据,在新的内存中保存,然后将新的地址返回
num2 = nums.copy() print(num2) # [1, 2, 3, 4, 5] print('num2', id(num2)) # num2 39379584
del nums[-1]
print(num3) # [1, 2, 3, 4]
print(num2) # [1, 2, 3, 4, 5]
3、列表.count(元素)
统计列表中指定元素的个数
nums = [97, 85, 55, 77, 87, 85, 85]
print(nums.count(85)) # 3
print(nums.count(100)) # 0
4、列表.extend(序列)
将指定序列中所有的元素全部添加到列表的后面 (append只添加一个)
nums = [1, 2]
nums.append('abc')
print(nums) # [1, 2, 'abc']
nums.extend('abc')
print(nums) # [1, 2, 'abc', 'a', 'b', 'c']
nums = [1, 2]
nums.extend([100, 200])
print(nums) # [1, 2, 100, 200]
5、列表.index(元素)
获取指定元素在列表中的下标(下标是0开始增加的下标)
如果元素有多个,只返回最前面那一个的下标
如果元素不存在会报错
movies = ['怦然心动', '阿甘正传', '绿皮书', '肖申克的救赎', '触不可及', '当幸福来敲门', '绿皮书']
print(movies.index('阿甘正传')) # 1
print(movies.index('绿皮书')) # 2
# print(movies.index('初恋五十次')) # 报错
6、列表.reverse()
将列表倒序,不会产生新的列表
movies = ['怦然心动', '阿甘正传', '绿皮书', '肖申克的救赎', '触不可及', '当幸福来敲门', '绿皮书']
movies.reverse()
print(movies) # ['绿皮书', '当幸福来敲门', '触不可及', '肖申克的救赎', '绿皮书', '阿甘正传', '怦然心动']
7、列表.sort()
将列表中的元素从小到大排序,不会产生新的列表
nums = [22, 97, 88, 85, 96]
result = nums.sort()
print(result) # None 没有意义
print(nums) # [22, 85, 88, 96, 97]
列表.sort(reverse=True)
将列表中的元素从大到小排序,不会产生新的列表
nums.sort(reverse=True)
print(nums) # [97, 96, 88, 85, 22]
二、listComprehension
通过序列创建列表的一种特殊的表达式
结构1: - 变换
[表达式 for 变量 in 序列]
功能:让变量去序列中取值,每取一个值产生一个元素(元素就是对应的表达式的值)
list1 = [] for 变量 in 序列: liet1.append(表达式)
result = [x for x in range(3)]
print(result) # [0, 1, 2]
result = [x*2 for x in range(3)]
print(result) # [0, 2, 4]
result = [100 for x in range(4)]
print(result) # [100, 100, 100, 100]
练习:提取数字序列中所有元素的个位,创建一个新的列(推导式)
nums = [239, 78, 27, 90, 23, 112] -> [9, 8, 7, 0, 3, 2]
nums = [239, 78, 27, 90, 23, 112] newNums = [x % 10 for x in nums] print(newNums) # [9, 8, 7, 0, 3, 2]
结构2
[表达式 for 变量 in 序列 if 条件语句]
功能:让变量去序列中取值,每取一个值如果条件成立产生一个元素(元素就是对应的表达式的值)
list1 = [] for 变量 in 序列: if 条件 语句: list1.append(表达式)
练习:
nums = [23, 23.4, True, 'abc', 97, 85, '123' ] result = [x for x in nums if type(x) == int] print(result) # [23, 97, 85]
三、tuple
1.什么是元组(tuple)
元组是不可变(不支持增删改);元组是有序的(支持下标操作)
元素:任何类型的数据都可以作为元组的元素
t1 = ()
print(t1, type(t1)) # () <class 'tuple'>
t2 = (10, 23.8, 'abc', 10)
print(t2) # (10, 23.8, 'abc', 10)
2.元组就是不可变的列表
列表中除了增删改以外的操作都适用于元组
2.1获取元素
t3 = ('绿色', '黄色', '粉色', '红色', '白色')
print(t3[1], t3[-4]) # 黄色 黄色
print(t3[1:3]) # ('黄色', '粉色')
print(t3[::-2]) # ('白色', '粉色', '绿色')
for x in t3:
print('x:', x, end=' ')
print() # x: 绿色 x: 黄色 x: 粉色 x: 红色 x: 白色
2.2相关操作
t3 = ('绿色', '黄色', '粉色', '红色', '白色')
print('黑色' in t3) # False
newNums = sorted((23, 78, 90, 45, 97, 85))
print(newNums) # [23, 45, 78, 85, 90, 97]
# sorted 使用序列生成新的列表并返回
3.元组特有和更常用的相关操作
3.1 只有一个元素的元组
必须在唯一的元素后面添加逗号
l1 = [100]
print(l1, type(l1)) # [100] <class 'list'>
t1 = (100,)
print(t1, type(t1), len(t1)) # (100,) <class 'tuple'> 1
3.2 在没有歧义的情况下元组的小括号可以省略
直接将多个数据用逗号隔开表示的也是一个元组
t2 = 23, 97, 85
print(t2, type(t2)) # (23, 97, 85) <class 'tuple'>
3.3直接使用多个变量获取元组中的元素
1)让变量的个数和元组中的元素个数保持一致
subjects = ('python', 'java', 'H5', 'UI')
x1, x2, x3, x4 = subjects
print(x1, x2, x3, x4) # python java H5 UI
p1 = (100, 200)
x, y = p1
print(x, y) # 100 200
m, n, p = 10, 20, 30
2)让变量的个数小于元组中的元素的个数,并且在其中某一个变量前加*。
获取的时候先让不带* 的变量按位置获取对应的元素,剩下的元素全部由带* 的变量获取(列表)
student = ('小明', 18, 89, 78, 23, 8, '男')
name, *others, sex = student # *others 相当于一个容器
print(name, others, sex) # 小明 [18, 89, 78, 23, 8] 男
*x, y, z = student
print(x, y, z) # ['小明', 18, 89, 78, 23] 8 男
4.元组相关方法
元组.count(元素) - 统计元组中指定元素的个数
元组.index(元素) - 获取元素在元组中的下标
四、dict
1.什么是字典(dict)
字典是可变的(支持增删改);字典是无序(不支持下标操作)
字典保存数据其实真正想要保存的是值,键是用来对值进行区分和说明
- 元素 - 字典的一个元素是一个键值对
- 键 - 必须是不可变的类型的数据(数字、字符串和元组),但是一般使用字符串
- 值 - 可以是任何类型的数据
空字典
d1 = {}
键是不可变的数据
d2 = {'a': 10, 10: 20, (10, 20): 30} print(d2) # {'a': 10, 10: 20, (10, 20): 30} # d3 = {'a': 10, 10: 20, [10, 20]: 30} # print(d3) # 报错 TypeError: unhashable type: 'list'
键是唯一的
d4 = {'a': 10, 'b': 20, 'a': 30} print(d4) # {'a': 30, 'b': 20}
字典是无序的
print({'a': 10, 'b': 20, 'c': 30} == {'a': 10, 'c': 30, 'b': 20}) # True
2.增删改查
2.1 查
获取字典中的某个元素的值
1)查单个
字典[key] - 获取字典中指定key对应的值,如果key不存在会报错
student = {'name': '小明', 'age': '30', 'gender': '男', 'height': '175', 'weight': '73', 'grade': '65'} print(student['gender']) # 男 print(student['weight']) # 73 # print(student['score']) # 报错 KeyError: 'score'
字典.get(key) - 获取字典中指定key对应的值,如果key不存在返回None
print(student.get('height')) # 175 print(student.get('score')) # None
字典.get(key,默认值) - 获取字典中指定key对应的值,如果key不存在返回默认值
print(student.get('score', 0)) # 0
2)遍历
for 变量 in 字典:
循环体
注意:变量依次取到的时候字典的键
student ={'name': '小明', 'age': '30', 'gender': '男', 'height': '175', 'weight': '73', 'grade': '65'}
for x in student:
print('x:', x, student[x])
作业
1.创建一个列表,列表中有10个数, 保证列表中元素的顺序,对列表进行排重,并对列表使用进行降序排序
例如:随机生成了[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
--- 去重之后 [70, 88, 91, 107, 234, 177, 282, 197]
---- 降序排序 [282, 234, 197, 177, 107, 91, 88, 70]
from random import randint
list1 = [randint(0, 10) for _ in range(10)]
list2 = []
for x in list1:
if x not in list2:
list2.append(x)
print(sorted((list2), reverse=True))
2.利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
result = [x for x in range(3, 100, 10)]
print(result)
b. 利用列表推到是将 列表中的整数提取出来
例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
list = [True, 17, "hello", "bye", 98, 34, 21]
result = [x for x in list if type(x) == int]
print(result)
c.利用列表推导式 存放指定列表中字符串的长度
例如 ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
nums = ["good", "nice", "see you", "bye"]
x = [len(x) for x in nums]
print(x)
3.已知代码如下,请回答出各个print的结果 并说明原因
nums = [17, 39, 28, 51]
nums2 = nums
nums2.pop()
print(len(nums))
# 结果是3 [17, 39, 28]
# 原因:nums2.pop() 此操作删除了列表最后一个元素51,由于重新赋值,nums2和 nums 存储地址是同一个。
# 所以删除了nums2最后一个元素也是删除了nums,故nums列表中只有3个元素
numlist = [17, 22, 39, 58, [55, 43]]
nums3 = numlist.copy()
print(numlist is nums3) # 结果False,原因是numlist.copy()是复制一个新的列表,存储地址不一样,故两个列表并不相同
numlist[-1][0] = 99
print(nums3) # nums3 会发生变化,[55, 43]为列表,在numlist中此列表存储的是地址,故修改此列表中的元素,copy的nums3也会修改此列表中的元素
4.定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )
a.统计不及格学生的个数
students = [{'name': '小明', 'age': 12, 'gender': '男', 'phone': '15811111111', 'grade': 55},
{'name': '小红', 'age': 11, 'gender': '女', 'phone': '15822222228', 'grade': 80},
{'name': '小白', 'age': 14, 'gender': '男', 'phone': '15833333333', 'grade': 59},
{'name': '小紫', 'age': 13, 'gender': '不明', 'phone': '15844444444', 'grade': 99},
{'name': '小绿', 'age': 11, 'gender': '男', 'phone': '15855555555', 'grade': 100},
{'name': '小橙', 'age': 12, 'gender': '女', 'phone': '15866666668', 'grade': 98}]
count = 0
for x in students:
if x['grade'] < 60:
count += 1
print('不及格人数:', count)
b.打印不及格学生的名字和对应的成绩
for x in students:
grade = x['grade'] # 避免两次取值,先赋值
if grade < 60:
print('不及格:', x['name'], grade)
c.统计未成年学生的个数
count = 0
for x in student:
if x['age'] < 18:
count += 1
print(count)
d.打印手机尾号是8的学生的名字
for x in students:
phone = x['phone']
if phone[-1] == '8':
print('电话尾号为8:', x['name'])
e.打印最高分和对应的学生的名字
# 方法一: 最高分有一个
bestStu = students[0]
for x in students:
if x['grade'] > bestStu['grade']:
bestStu = students
print(bestStu['name'])
# 方法二: 最高分有多个
maxGrade = max([x['garde']for x in students])
names = [x['name'] for x in students if x['grade'] == maxGrade]
print(names)
f.删除性别不明的所有学生
result = [x for x in students if x['gender'] != '不明']
print(result)
g.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)