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)