1.1 列表的概念及特征
列表是容器型数据类型:将[ ]作为容器标志,里面多个数据用逗号隔开:[元素1,元素2…]
列表作为容器的特征:
1.可变的(列表中的元素的个数可变;元素的值可变;元素的顺序可变)。
2.列表是有序的(每个元素都有一个表示在元素列表中位置的序号)。
元素的概念:容器中每个独立的数据就是元素(任何类型的数据都可以作为列表的元素)
students = ['张丁也','钟林君']
print(students)
names = [] # --- 空列表,布尔值为False,值为0
print(names,bool(names))
list1 = [1,2,3.4,'adaf',True,[1,2]]
1.2 列表中数据的查
2.1 查单个(获取列表中某一个元素)
语法:
列表[下标] -获取列表中指定下标对应的元素
说明:
列表 - 任何结果是列表的表达式,例如:具体的一个列表值、保存列表的变量
[ ] - 固定写法
下标 - 又叫索引,他是元素在列表中的位置信息
取值方式1:从0开始一次增加,其中0表示第一个元素,1表示第二个元素
取值方式2:从-1开始依次减少,其中-1表示倒数第一个元素,-2表示倒是第二个元素
2.2 切片(查部分) - 同时获取列表中的多个元素
原理:通过提供的下标的范围来获取范围内的下标对应的元素。
语法:
列表[开始下标:结束下标:步长] - 从开始下标开始,每次下标增加一个步长,取到结束下标为止。
注意:
1)结束下标对应的元素一定取不到,开始下标对应的元素可以取到。
2)如果步长为正,表示从前往后取,这个时候开始下标的位置必须在结束下标的前面
3)如果步长为负,表示从后往前取,这个时候开始下标的位置必须在结束下标的后面
省略步长 ---- 相当于步长是1
格式:列表[开始下标:结束下标]
2.3 遍历(取出列表中的每一个元素)
方法一:直接获取到列表中的每一个元素
for 变量 in 列表:
循环体
print(变量)
变量取到的就是列表中的每一个元素
方法二:先获取每个元素对应的下标,然后再通过下标获取元素
for 变量 in range(列表长度):
列表[变量]
len (列表) - 获取列表中元素的个数
ames = ['林俊杰','周杰伦','王力宏','陈奕迅','薛之谦','邓紫棋']
print(names[0]) # 林俊杰
print(names[-2]) # 薛之谦
print([12,23][1]) # 23
# print(names[-5]) # IndexError: list index out of range
print(names[1:4:1]) # ['周杰伦', '陈奕迅', '王力宏']
print(names[1:-1:1]) # ['周杰伦', '陈奕迅']
print(names[1:3:-1]) # [] 空值
print(names[5:0:1]) # [] 空值
print(names[1:4:2]) # ['周杰伦', '陈奕迅']
print(names[5:1:-3]) # ['邓紫棋', '王力宏']
print(names[1:-1]) # ['周杰伦', '王力宏', '陈奕迅', '薛之谦']
print(names[-5:3]) # ['周杰伦', '王力宏']
# 2.省略开始下标
# 列表[:结束下标:步长]
# 步长为正,从第一个元素往后取
# 步长为负,从最后一个往前取
# 列表[:结束下标] - 从第一个元素开始往后取
heroes = ['后羿','李元芳','诸葛亮','娜可露露','甄姬','王昭君','孙膑']
print(heroes[:4:2]) # ['后羿', '诸葛亮']
print(heroes[:2:-1]) # ['孙膑', '王昭君', '甄姬', '娜可露露']
print(heroes[:-1]) # ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君']
# 3.省略结束下标
# 列表[开始下标::步长] -
# 步长为正,从开始取到最后一个元素(往后取,取完为止)
# 步长为负,从开始下标取到最后一个值
# 列表[开始下标:] -
print(heroes[1:]) # ['李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
print(heroes[2::-1]) # ['诸葛亮', '李元芳', '后羿']
print(heroes[-1::-2]) # ['孙膑', '甄姬', '诸葛亮', '后羿']
# 4.一起省略
# 列表[::步长]
# 列表[:]
print(heroes[::-1])
print(heroes[::2]) # ['后羿', '诸葛亮', '甄姬', '孙膑']
print(heroes[:]) # ['后羿', '李元芳', '诸葛亮', '娜可露露', '甄姬', '王昭君', '孙膑']
games = ['王者荣耀','和平精英','狼人杀','植物大战僵尸','开心消消乐','红色警戒']
for x in games:
print(x)
'''
王者荣耀
和平精英
狼人杀
植物大战僵尸
开心消消乐
红色警戒
'''
# 统计列表中分数不及格的个数:
scores = [90,89,67,54,32,99,67,100]
i = 0
for x in scores:
if x < 60:
print(x)
i += 1
print(i)
'''
54
32
2
'''
for x in range(5):
print(x,games[x])
# 练习;给一个数字列表,并打印出所有的3的倍数对应的元素
nums = [23,9,34,5,15,6]
for x in nums:
if x % 3 == 0:
print(x)
'''
9
15
6
'''
1.3.列表中数据的增加
增 - 往列表中添加元素的过程
1.列表.append() - 在列表的最后添加指定的元素
2 列表.insert(下标,要插入的元素) -在列表的指定下标对应的元素前插入指定元素
# 1.1列表.append() - 在列表的最后添加指定的元素
subjects = ['ios','安卓']
print(subjects)
subjects.append('h5')
print(subjects) # ['ios', '安卓', 'h5']
subjects.append(122)
print(subjects) # ['ios', '安卓', 'h5', 122]
subjects.append([10,20])
print(subjects) # ['ios', '安卓', 'h5', 122, [10, 20]]
print(subjects[-1][-1]) # 20
# 1.2 列表.insert(下标,要插入的元素) -在列表的指定下标对应的元素前插入指定元素
tvs = ['甄嬛传','还珠格格','情深深雨蒙蒙','琅琊榜']
tvs.insert(1,'庆余年')
print(tvs) # # ['甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
tvs.insert(0,'西游记')
print(tvs) # ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
# 将输入的成绩插入到scores中,要求插入后不影响分数从大到小的性质
scores = [100,98,97,97,89,86,72,66,63,59,42]
score = 89
for x in range(len(scores)):
if scores[x] <= score:
scores.insert(x,score)
break
else:
scores.append(score)
print(scores # [100, 98, 97, 97, 89, 89, 86, 72, 66, 63, 59, 42]
1.4 列表中数据的删除
删 - 删除列表中的元素
1 del 列表[下标] - 删除列表中指定下标对应的元素
2 列表.remove(元素) - 删除列表中指定的元素列表
3.pop( ) - 取出列表中最后一个元素,并且返回;列表.pop(下标) - 取出列表中指定下标对应的元素
# 1.del 列表[下标] - 删除列表中指定下标对应的元素
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
del tvs[-2]
print(tvs) # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']
# 2.列表.remove(元素) - 删除列表中指定的元素
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
tvs.remove('情深深雨蒙蒙')
print(tvs) # ['西游记', '甄嬛传', '庆余年', '还珠格格', '琅琊榜']
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '庆余年', '琅琊榜']
tvs.remove('庆余年')
print(tvs) # 如果被删除的元素在列表中有多个,只删除最前面的那个
# ['西游记', '甄嬛传', '还珠格格', '庆余年', '琅琊榜']
# 3.pop
# 列表.pop() - 取出列表中最后一个元素,并且返回
# 列表.pop(下标) - 取出列表中指定下标对应的元素
result = tvs.pop()
print(tvs) # ['西游记', '甄嬛传', '还珠格格', '庆余年']
print(result) # 琅琊榜
tvs = ['西游记', '甄嬛传', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
result = tvs.pop(1)
print(tvs) # ['西游记', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
print(result) # 甄嬛传
1.5列表中数据的修改
改 - 修改某个元素的值
列表[下标] =新元素 - 修改列表中指定下标对应的元素为新元素
tvs = ['西游记', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
tvs[0] = '生活大爆炸'
print(tvs) # ['生活大爆炸', '庆余年', '还珠格格', '情深深雨蒙蒙', '琅琊榜']
# 将分数列表中所有低于60分的分数修改为不及格
scores = [78,90,20,34,78,99,34,55]
for x in range(len(scores)):
if scores[x] < 60:
scores[x] = '不及格'
print(scores) # [78, 90, '不及格', '不及格', 78, 99, '不及格', '不及格']
1.6 列表的相关运算和相关的函数
1.列表的数学运算:+、*
列表的+:列表1 + 列表2 - 将两个列表合并产生一个新的列表
列表的*:列表 * n / n * 列表 - 将列表中的元素重复 n 次
# 列表1 + 列表2 - 将两个列表合并产生一个新的列表
list1 = [10,20,30]
list2 = [100,200]
print(list1 + list2) # [10, 20, 30, 100, 200]
print(list1,list2) # 不改变原来列表的值
# 1 .2 列表 * n / n * 列表 - 将列表中的元素重复 n 次
print(list1*3) # list1 + list1 + list1 [10, 20, 30, 10, 20, 30, 10, 20, 30]
- 比较运算
所有的运算符都支持 - ==、!=、>=、<=、>、<
print([10,20,30]==[10,20,30]) # True
print([10,20,30]==[30,20,10]) # False
# 1.2比较大小 - 比较第一对不相等的元素的大小(只比较一对)
print([100,200]>[10,20,30,40]) # True
- in 和 not in
in 列表 - 判断指定的列表中是否存在指定元素
not in - 判断指定的列表的元素是否不在列表中
print(100 in [10,20,30]) # False
print(10 not in [10,20,30]) # True
print([10] in [10,20,30]) # False
4.相关函数:max、min、sorted、sum、list、len
比较的原则是列表里面的数据类型必须一致并且元素本身支持比较运算
max(列表) - 获取列表中最大的元素
min(列表) - 获取列表中最小的元素
nums = [89,132,2324,65,76,8]
print(max(nums)) # 2324
print(min(nums)) # 8
sorted(列表)- 将列表中的元素升序排序,排序后产生一个新的列表
sorted(列表,reverse = True) — 降序排序
new_nums = sorted(nums)
print(new_nums) # [8, 65, 76, 89, 132, 2324]
print(nums) # [89, 132, 2324, 65, 76, 8]
new_nums = sorted(nums,reverse=True)
print(new_nums) # [2324, 132, 89, 76, 65, 8]
sum(列表) - 求列表中所有元素的和(列表必须是数字列表)
nums = [2324, 132, 89, 76, 65, 8]
print(sum(nums)) # 2694
list(序列) - 将序列转换为列表(获取序列中所有的元素创建一个新的列表)
# 注意:所有的序列都可以转换成列表
print(list('12')) # ['1', '2']
print(list(range(1,4))) # [1, 2, 3]
len(列表) - 取出列表中元素的个数
print(len(nums)) # 6
1.已知一个数字列表,求列表中心元素。
nums = [1,2,3,4,5,6,7,8,9,10,11]
x = int(len(nums)/2)
print(nums[x])
print(len(nums))
for index in range(1,len(nums)+1):
if (len(nums) % 2 != 0:
print(nums[int(len(nums)/2)])
break
else:
print(nums[int(len(nums)/2)-1],nums[int((len(nums)/2))])
2.已知一个数字列表,求所有元素和。
s = 0
for x in nums:
if x > 0:
s += x
print(s)
print(sum(nums))
3.已知一个数字列表,输出所有奇数下标元素。
for x in range(len(nums)):
if x % 2 != 0:
print(nums[x])
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
for x in range(len(nums)):
if nums[x] % 2 != 0:
print(nums[x])
5.已知一个数字列表,将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
for x in range(len(nums)):
i = nums.pop(x)
nums.insert(x,x*2)
print(nums)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
nums = [56,76,68,58,89,98,87]
a = max(nums)
b = min(nums)
nums.remove(a)
nums.remove(b)
print(nums)
print(sum(nums)/(len(nums)))
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]
d = []
for x in A:
for y in B:
if x in B:
d.append(x)
break
else:
continue
print(d)
9.*有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
例如: nums = [19, 89, 90, 600, 1] —> 600
10.*获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3