Python 初识列表
列表的概述
- 列表的定义
- 列表是容器型数据类型(序列)之一,
- 列表是以 [ ] 作为容器的标志,元素与元素之间用逗号隔开
- 列表的特点
- 列表是可变的 - 元素的个数、值和顺序可变
- 列表是有序的 - 列表支持下标操作,并且列表中每个元素都具有两组下标值
- 列表对元素的要求
- 没有要求,即所有类型的数据都可以存放。
- 空列表 - 没有任何元素的列表
# len()可以获取序列中元素的个数,或者说是序列的长度
list1 = []
list2 = [ ]
print(len(list1), len(list2))
print(type(list1), type(list2))
print(bool(list1), bool(list2))
[Out]
0 0
<class 'list'> <class 'list'>
False False
列表的操作
- 查 - 获取元素
- 提取 - 获取单个元素
# 语法
列表[下标]
- 说明
功能:获取到列表中指定下标的元素
下标:下标又叫索引,是元素在有序序列中的位置信息
names = ['神里凌华', '甘雨', '胡桃', '芭芭拉', '珊瑚宫 心海', '荧', '七七', '早柚', '哒哒鸭']
print(names[0])
print(names[-1])
[Out]
'神里凌华'
'哒哒鸭'
- 遍历 - 获取全部元素
# 结构1
for 变量 in 列表:
循环体
# 结构2
for value in range(-len(列表) - 1, -1, 1)
循环体
# 结构3
for index, value in enumerate(列表):
循环体
- 说明:
功能:获取到序列中所有元素
value:变量,起中间作用
# 练习1:统计不及格人数
scores = [89, 67, 56, 90, 98, 30, 78, 51, 99]
count = 0
for i in scores:
if i < 60:
count += 1
print(count)
# 练习2:统计列表中整数的个数
list4 = [89, 9.9, 'abc', True, 'abc', '10', 81, 90, 23]
count = 0
for i in list4:
# if type(i) == type(1):
if type(i) == int:
count += 1
print(count)
# 练习3:求nums中所有偶数的和
nums = [89, 67, 56, 90, 98, 30, 78, 51, 99]
sum_num = 0
for i in nums:
if i % 2 == 0:
sum_num += i
print(sum_num)
- 增 - 添加元素
- 添加单个元素
- 列表.append(元素) - 在列表的最后添加一个元素
movies = ['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪']
print(movies)
movies.append('肖申克的救赎')
print(movies)
[Out]
['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪']
['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪', '肖申克的救赎']
- 列表.insert(下标, 元素) - 在指定下年对应的元素前插入指定元素
movies = ['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪']
print(movies)
movies.insert(2, '沉默的羔羊')
print(movies)
[Out]
['五十六度灰', '哥斯拉大战金刚', '沉默的羔羊', '桃花侠大战菊花怪']
- 批量添加元素
- 列表1.extend(列表2) - 将列表2里的元素全部添加到列表1的后面
movies = ['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪']
print(movies)
movies.extend(['熊出没', '触不可及', 'V字仇杀队'])
print(movies)
[Out]
['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪']
['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪', '熊出没', '触不可及', 'V字仇杀队']
- 删 - 删除列表元素
- del 列表[下标] # 删除列表中指定下标对应的元素
- 下标不能越界
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
del teleplays[2]
print(teleplays)
del teleplays[-2]
print(teleplays)
[Out]
['琅琊榜', '大秦', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
['琅琊榜', '大秦', '康熙王朝', '破产姐妹', '亮剑', '西游记']
- 列表.remove(元素) - 删除列表中指定元素
- 如果元素不存在,会报错
- 如果同一个元素出现多次,只会删除第一个
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
teleplays.remove('琅琊榜')
print(teleplays)
nums = [10, 20, 30, 20, 10, 20]
nums.remove(10)
print(nums)
[Out]
['大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
[20, 30, 20, 10, 20]
- pop()
- 列表.pop() - 取出列表最后一个元素
- 列表.pop(下标) - 取出列表中指定下标的元素
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
del_item = teleplays.pop()
print(teleplays) # ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸']
print(del_item)
teleplays.pop(1)
print(teleplays)
- 列表.clear() - 将列表清空
- 改 - 修改元素的值
teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
print(teleplays)
teleplays[0] = '庆余年'
print(teleplays)
[Out]
['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
['庆余年', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
列表切片
- 语法
列表[开始下标: 结束下标: 步长]
- 说明
- 开始下标 - 下标值(0开始,-1开始都行);确定切片优先范围的起点,可以取到
- : - 固定写法
- 结束下标 - 下标值(无论正负,位置正确即可);确定切片有效范围的终点,取不到
- 步长 - 决定切片方向(步长对应的方向必须和开始到结束的方向一致,否则切片为空列表)
获取方式元素的方式(决定是一个一个取,还是跳着取) - 切片的有效范围:[开始下标, 结束下标)
games = ['王者荣耀', '和平精英', '生化危机', '原神', '幻塔', '部落冲突']
print(games[1:5:1])
print(games[1:-1:1])
print(games[3:-1:-1])
print(games[-1:-5:1])
print(games[0:-3:2])
print(games[-1:2:-2])
print(games[2:-1:1])
print(games[2:-1:1])
[Out]
['和平精英', '生化危机', '原神', '幻塔']
['和平精英', '生化危机', '原神', '幻塔']
['王者荣耀', '生化危机']
['部落冲突', '原神']
['生化危机', '原神', '幻塔']
['生化危机', '原神', '幻塔']
['生化危机', '原神', '幻塔']
- 省略步长
- 语法
列表[开始下标: 结束下标] == 列表[开始下标: 结束下标: 步长]
- 实例
#省略步长,步长默认为1
games = ['王者荣耀', '和平精英', '生化危机', '原神', '幻塔', '部落冲突']
print(games[2:-2])
[Out]
['生化危机', '原神']
- 省略开始下标
- 语法
列表[: 结束下标: 步长] / 列表[: 结束下标]
- 注意
- 省略开始下标,如果为正,从第一个元素往后取;
- 如果步长为负,从最后一个往前取。
- 实例
print(games[:-3])
print(games[:3:-1])
print(games[:-5:-1])
[Out]
['王者荣耀', '和平精英', '生化危机']
['部落冲突', '幻塔']
['部落冲突', '幻塔', '原神', '生化危机']
- 省略结束下标
- 语法
列表[开始下标: : 步长] / 语法:列表[开始下标: ]
- 注意
- 省略结束下标:如果不长为正,从开始下标开始取到最后一个元素;
- 如果步长为负,从开始下标取到第一个元素。
- 实例
print(games[1:])
print(games[3::2])
print(games[-2::-1])
[Out]
['和平精英', '生化危机', '原神', '幻塔', '部落冲突']
['原神', '部落冲突']
['幻塔', '原神', '生化危机', '和平精英', '王者荣耀']
- 一起省略
- 语法
列表[: : 步长] / 列表[:]
- 实例
print(games[::-1])
print(games[::2])
[Out]
['部落冲突', '幻塔', '原神', '生化危机', '和平精英', '王者荣耀']
['王者荣耀', '生化危机', '幻塔']
列表相关操作
- 数学运算符
- 加法运算
print([1, 2, 3] + ['a', 'b', 'c'])
[Out]
[1, 2, 3, 'a', 'b', 'c']
- 乘法运算
print([1, 2, 3] * 3)
[Out]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
- 比较运算符
- ==、!=
print([1, 2, 3] == [1, 2, 3]) # True
print([1, 2, 3] == [1, 3, 2]) # False
print({1, 2, 3} == {1, 2, 3}) # True
- 列表>(<、>=、<=) 列表2
- 两个列表比较大小的原理:比较的是第一队不相等的元素大小(下标相同的元素为1对,这个下标是0开始的下标)
print([1, 2, 3, 4, 5] > [1, 2]) # False 第一对(相同位置的人)元素的大小
[Out]
True
- in 和 not in
- 元素 in 列表 - 判断列表中是否存在指定元素
- 元素 not in 列表 - 判断列表中是否不存在元素
print(10 in [10, 20, 30])
print([10, 20] in [10, 20, 30])
[Out]
True
False
相关函数和方法
- 列表.count(元素) - 统计额表总指定元素的个数
nums = [10, 20, 30, 4, 10, 20, 10, 10]
print(nums.count(10))
print(nums.count(4))
print(nums.count(100))
[Out]
4
1
0
- 列表.index(元素) - 获取元素第一次在列表中出现的下标
nums = [10, 20, 30, 4, 10, 20, 10, 10]
print(nums.index(4))
[Out]
3
- 列表.reverse() - 倒序
nums = [10, 20, 30, 4, 10, 20, 10, 10]
nums.reverse()
print(nums)
[Out]
[10, 10, 20, 10, 4, 30, 20, 10]
- 列表.sort() - 将列表中的元素从小到大排序
nums = [10, 20, 5, 2, 100]
nums.sort()
# 列表.sort(reverse=True) - 将列表从大到小排序
nums.sort(reverse=True)
print(nums)
[Out]
[2, 5, 10, 20, 100]
[100, 20, 10, 5, 2]
- 列表.copy() - 赋值列表产生一个元素一摸一样的新列表
练习
1.已知一个数字列表,求列表中心元素。
n = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
if len(n) % 2 == 1:
print(n[len(n) // 2])
else:
print(n[len(n) // 2 - 1], n[len(n) // 2])
2.已知一个数字列表,求所有元素和。
sum_num = 0
for i in n:
sum_num += i
print('所有元素和:', sum_num)
3.已知一个数字列表,输出所有奇数下标元素。
print(n[1::2])
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
for value in n:
if value % 2 == 1:
print(value, end=' ')
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
n = [value * 2 for value in n]
print(n)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
# 方法1
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
value = len(names)
i, j = 0, 0
while j < value:
count = names.count(names[i])
if count != 1:
del names[i]
j += 1
else:
i += 1
j += 1
print(names)
# 方法2
new_names = []
for i in names:
if i not in new_names:
new_names.append(i)
print(new_names)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
n = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
n.remove(max(n))
n.remove(min(n))
print('平均分数:', sum(n) / len(n))
8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
if len(A) > len(B):
for i in B:
if i in A:
C.append(i)
else:
for i in A:
if i in B:
C.append(i)
print(C)
9.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [19, 89, 90, 600, 1]
max_num = nums[0]
for i in nums:
if i > max_num:
max_num = i
print(max_num)
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, 1]
item, value = 0, []
for i in nums:
if i in value:
continue
count = nums.count(i)
if count > item:
value.append(i)
item = count
elif count == item:
value.append(i)
print(value)