容器型数据类型(序列)
变量从是否是容器分为:非容器性数据类型和容器性数据类型的变量
非容器性数据类型的容器
一个盒子里面只有一个各格子,所以同一时间只能保存一个数据。例如:int、float、bool、None等。
容器型数据类型的容量
一个盒子里面有多个格子,每个格子可以存储不一样的数据,所以同一时间就可以保存多个数据。例如:list、dict、tutlp、set、str等
列表(list)
列表是容器性数据类型,是将中括号[]作为容器标志,里面多个元素用逗号隔开:[元素1,元素2,元素3,元素4,…]
元素
指的是容器中每一个独立的数据
- 列表是可变的(可变是指元素的个数、值和顺序可变 - 支持增删改);列表有序(支持下标操作)
- 列表中元素:任何类型的数据都可以作为列表的元素。
- 同一个列表中的元素可以是不同类型的数据
获取(查)单个元素
语法1:列表[下标]
说明:列表
- 任何结果是列表的表达式,例如:保存列表的变量或者具体的列表数据[]
- 固定写法下标
- 下标是有序序列中元素的位置。python中有序序列中元素的下标有两种:
第一种:从前往后从 0 开始一次增加
第二种:从后往前从 -1 开始一次减少
注意:如果需要获取的下标超了出列表中的元素下标,则报错(IndexError: list index out of range)
切片 – 获取部分元素
语法1:列表[开始下标:结束下标:步长]
- 确定是否可以获取数据:从开始下标到结束下标的方向如果和步长对应的方向(步长为正表示从前往后,步长为负表示从后往前)一致就可以获取数据
- 确定有效范围:开始下标对应元素可以取到,结束下标对应的元素取不到 --> [开始下标, 结束下标)
- 确定切片结果:在有效范围内按照步长绝对值取数据;绝对值为1就一个一个的取,绝对值为n(n>0)就跳n个取
语法2:(省略步长)
列表[开始下标:结束下标]
语法3:(省略开始下标)
列表[:结束下标:步长] 或 列表[:结束下标]
如果步长为正,从第一个元素开始从前往后取;如果步长为负,从最后一个元素从后往前取
语法4:(省略结束下标)
列表[开始下标::步长] 或 列表[开始下标:]
如果步长为正,从开始下标开始从前往后取完为止;如果步长为负,从开始下标开始从后往前取完
遍历 – 一个一个全部取出来
方法一:直接获取元素
for 变量 in 列表:
循环体
变量一次获取的就是列表中的每个元素
方法二:通过获取每个元素的下标来获取元素
for 变量 in range(列表长度):
循环体
变量依次获取的时候列表中元素的下标
补充: len(列表) - 获取列表的长度
增 – 添加元素
- 列表.append(元素) - 将元素添加到列表的最后(即追加)
- 列表.insert(下标,元素) - 将元素插入到指定下标前
删 – 删除元素
-
del 列表[下标]
– 删除指定下标对应的元素 -
列表.remove(元素)
– 删除指定元素
如果元素不存在,则报错(ValueError: list.remove(x): x not in list)
如果元素有多个,只删最前面的一个 -
列表.pop()
– 取出最后一个元素,并且返回列表.pop(下标)
– 取出指定下标对应的元素,并且返回
改 – 替换元素
列表[下标] = 值
– 将列表中指定下标对应的元素改成指定的值
in
-
元素 in 列表
– 判断列表是否存在指定的元素 -
元素 not in 列表
– 判断列表中是否不存在指定元素
练习
- scores = [45, 69, 87, 68, 95, 68, 58]保存所以学生的分数
(1) 统计不及格人数
(2) 计算学生平均分
scores = [45, 69, 87, 68, 95, 68, 58]
count = 0
sum = 0
for i in scores:
sum += i
if i < 60:
count += 1
print("不及格人数:", count, "平均分:", sum / len(scores))
- 已知列表nums=[90, 1.23, ‘hello’, 60, 5.3],统计nums中整数的个数
nums = [90, 1.23, 'hello', 60, 5.3]
count = 0
for i in nums:
if type(i) == int:
count += 1
print("整数的个数:", count)
1.已知一个数字列表,求列表中心元素。
lists = [56, 98, 63, 56, 87, 98, 36, 89]
for i in range(len(lists)):
if len(lists) % 2 == 0:
index = len(lists) // 2
print("中心元素:", lists[index-1], lists[index])
else:
index = len(lists) // 2
print("中心元素:", lists[index])
2.已知一个数字列表,求所有元素和。
lists = [56, 98, 63, 56, 87, 98, 36, 89]
sum = 0
for i in lists:
sum += i
print("所有元素和:", sum)
3.已知一个数字列表,输出所有奇数下标元素。
lists = [56, 98, 63, 56, 87, 98, 36, 89]
print("奇数下标的元素有:", lists[1::2])
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
lists = [56, 98, 63, 56, 87, 98, 36, 89]
for i in lists:
if i % 2 != 0:
print("值为奇数的元素:", i)
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
nums = [1, 2, 3, 4]
for i in range(len(nums)):
nums[i] *= 2
print(nums)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三', '王五', '孙六']
i = 0
while i < len(names):
if names[i] in names[i+1:]:
del names[i]
else:
i += 1
print(names)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
scores = [96, 90, 91, 92, 96, 99]
total = 0
max_score = min_score = scores[0]
for i in scores:
total += i
if i > max_score:
max_score = i
print((total - max_score - min_score) / len(scores) - 2)
8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
A = [1, 'a', 4, 90, 1]
B = ['a', 8, 'j', 1]
C = []
for i in A:
if i in B and i not in C:
C.append(i)
print("C=", C)
9.*有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [19, 89, 90, 600, 1]
m = nums[0]
for i in nums[1:]:
if i > m:
m = i
print(m)
10.*获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
max_count = 0
for i in nums:
count = nums.count(i)
if count > max_count:
max_count = count
new_num = []
for i in nums:
if nums.count(i) == max_count and i not in new_num:
new_num.append(i)
print(i)