====== list列表 ======
1. 什么是列表(list)
列表是Python提供的容器型数据类型,可变并且有序的
可变 —— 列表中的每个元素的 值 可变;列表中的 长度 可变;列表中元素的 顺序 可变(支持 增 删 改)
有序 —— 每个元素可以通过 下标 来确定位置
2. 列表的字面量:通过[]括起来,里面有多个元素,每个元素用逗号隔开
[1,2,3] # 1为一个元素
[10, 'abc', True] # 'abc'为一个元素
num = 100; [num, 200] # nun为一个元素
[] —— 空列表
注意:列表元素的类型可以是任何Python支持的数据类型;并且同一列表中不同元素的类型可以不一样
scores = [10, 20,30,40]
print(scores) # [10, 20, 30, 40]
任何类型的数据都可以作为列表的元素
list1 = [11, 10.22, 'abc', True, [1, 2, 3], {'a' : 10}, lambda x : 2*x] # 总共7个元素,长度为7
print(len(list1)) # 取其长度
list2 = [
10,
11.434,
'hello',
{'name' : '小明'}
]
a = [1, 10]
list3 = [a , 20]
print(list3) # [[1, 10], 20]
获取列表元素(和字符串获取字符的语法一样)
a. 获取单个元素
列表[下标] —— 获取列表中指定下标对应的元素
list1 = [10, 20, 30, 'abc']
print(list1[0], list1[-1]) # 10 abc 获取第一个元素,和最后一个元素
b. 获取部分元素(切片) —— 结果是列表 # 无论是否切到
列表[开始下标:结束下标:步长]
注意:取不到的时候,结果是空列表
moves = ['豆豆', '花花', '蓝蓝', '红红', '白白']
print(moves[1 : 3]) # ['花花', '蓝蓝']
print(moves[1 : 5 :2]) # ['花花', '红红']
print(moves[3 : -3 : -1]) # ['红红']
print(moves[3 : -3 : 1]) # []
print(moves[ : 2]) # ['豆豆', '花花']
print(moves[2 : ]) # ['蓝蓝', '红红', '白白']
print(moves[2 : : -1]) # ['蓝蓝', '花花', '豆豆']
print(moves[ : : -1]) # ['白白', '红红', '蓝蓝', '花花', '豆豆']
c. 一个一个的取出所有元素(遍历)
可以使用for循环直接遍历列表拿到每个元素(操作元素的时候和下标 无关 )
可以通过遍历列表元素对应的下标来遍历列表元素(操作元素的时候和下标 有关 )
# 直接遍历
for item in moves :
print(item)
# 豆豆
# 花花
# 蓝蓝
# 红红
# 白白
# 通过遍历下标遍历
for index in range(len(moves)) :
print('下标', index)
print(moves[index])
# 下标 0
# 豆豆
# 下标 1
# 花花
# 下标 2
# 蓝蓝
# 下标 3
# 红红
# 下标 4
# 白白
练习:统计一个班的学生成绩,存到一个列表里面,求整个班学生的平均成绩。
# [90, 89, 80, 70, 98, 67]
# 打印出平均成绩
scores = [90, 89, 80, 70, 98, 67]
total = 0
for score in scores :
total += score # 求总和
print('平均成绩', total / len(scores)) # 平均成绩 82.33333333333333
====== 增、删、改 ======
1. 增(添加列表元素)
a. .oppend
列表.oppend(元素) —— 在指定的 列表 的最后添加指定的 元素
b. .insert
列表.insert(下标,元素) —— 在指定的 下标前 插入指定的元素
animes = ['一人之下', '火隐忍者', '斗破苍穹', '尸兄'] # animes是 动漫 的意思
animes.append('七龙珠')
print(animes) #['一人之下', '火隐忍者', '斗破苍穹', '尸兄', '七龙珠'] 增加'七龙珠到'animes当中
animes.insert(2,'犬夜叉') # 添加到下标为2(斗破苍穹)之前
print(animes) # ['一人之下', '火隐忍者', '犬夜叉', '斗破苍穹', '尸兄', '七龙珠']
2.删(删除元素)
a. del
del 列表[下标] —— 删除列表中指定下标对应的元素
注意:del是Python中的关键字,可以用它删除任何数据,这儿的下标不能越界
b. remove
列表.remove(元素) —— 删除列表中第一个指定元素
注意:被删除的元素在列表中必须是存在的
c. .pop
列表.pop() —— 将列表中最后一个元素 取出,会返回取出来的元素
列表.pop(下标) —— 将列表中 指定下标对应的元素 从列表中取出,会返回取出来的元素
del的使用
# del animes[-100] # 下标不可越界,报错
del animes[-2] # 删除下标为-2(尸兄)
print(animes) # ['一人之下', '火隐忍者', '犬夜叉', '斗破苍穹', '七龙珠']
remove的使用
animes = ['一人之下', '火隐忍者', '一人之下', '斗破苍穹', '尸兄'] # animes是 动漫 的意思
animes.remove('一人之下') # 删除列表中第一个指定元素'一人之下'
# animes.remove('死神') # 被删除的元素在列表中必须是存在的,报错ValueError: list.remove(x): x not in list
print(animes) # ['火隐忍者', '一人之下', '斗破苍穹', '尸兄']
pop的使用
del_item = animes.pop()
print(animes, del_item) # ['火隐忍者', '一人之下', '斗破苍穹'] 尸兄
del_item = animes.pop(0)
print(animes, del_item) # ['一人之下', '斗破苍穹'] 火隐忍者
练习:用一个列表统计一个班的学生年龄(控制台不断输入年龄值,直到输入end为止),然后删除所有小于18岁的年龄
# [12, 20, 16, 15, 23] 产生列表
# [18, 20, 23] 删除小于18岁的年龄
ages = [] # 生成一个空列表保存年龄
age = input('请输入年龄:') # 产生年龄
while age != 'end' :
ages.append(int(age)) # 输入一个年龄就往列表中添加一个
age = input('请输入年龄:') # 输入下一个年龄
# print(ages) # [12, 13, 20, 18, 30]
★坑1:遍历列表删除部分元素,删不全! —— 遍历的时候对元列表切片
ages = [12,13, 20, 18, 30]
age = 12 12 < 18 : ages.remove(12)
ages = [13, 20, 18, 30]
age = 20 20 <18
age = 18 18 <18
age = 30 30 <18
ages = [12,13, 20, 18, 30]
temp = ages[ : ]
for age in temp :
if age < 18 :
ages.remove(age)
print(ages) # [20, 18, 30]
# 或
# 简写
ages = [12,13, 20, 18, 30]
for age in ages[ : ] :
if age < 18 :
ages.remove(age)
print(ages) # [20, 18, 30]
将小于18岁的拎出来,存到新的列表中
★坑2:通过下标遍历列表,删除元素的时候,下标越界和元素获取不完整
解决办法 —— 下标对应的元素需要删除,下标值不动,不会删除下标加1
ages = [30,12, 13, 20, 18, 30, 10]
index = range(6) = 0 ~ 5
index = 0 age = 12 ages = [13, 20, 18, 30, 10]
index = 1 age = 20 ages = [13, 20, 18, 30, 10]
index = 2 age = 18
index = 3 age = 30
index = 4 age = 10 ages = [13, 20, 18, 30]
index = 5 越界!
# ages = [12,13, 20, 18, 30, 10]
# for index in range(len(ages)) :
# age = ages[index]
# if age < 18 :
# ages.pop(index)
# print(ages)
ages = [12,13, 20, 18, 30, 10]
new_ages = [] # 保存被删除的元素
index = 0
while index < len(ages) :
age = ages[index]
if age < 18 :
del_item = ages.pop(index)
new_ages.append(del_item)
else :
index += 1 # 不需要删除的时候下标才增加
print(ages, new_ages) # [20, 18, 30] [12, 13, 10]
3. 改(修改元素的值)
列表[下标] = 新值 —— 修改列表中指定下标对应的值
list1 = [1, 2, 3]
list1[0] = 'abc' # 1的下标为0
print(list1) # ['abc', 2, 3]
练习:有一个列表中保存的是学生的成绩,要求将列表中成绩小于60分的改成'抄十遍试卷'
scores = [90, 78, 50, 77, 23, 82, 45]
count = 0
for index in range(len(scores)) :
if scores[index] < 60 :
scores[index] = '抄十遍试卷'
count += 1
print(scores, count) # [90, 78, '抄十遍试卷', 77, '抄十遍试卷', 82, '抄十遍试卷'] 3
====== 列表的相关运算 ======
1.相关运算:+,*
a.数学运算
列表1+列表2 —— 将两个列表中的元素合并在一起产生一个新的列表
列表*N —— 列表中的元素重复N次,产生一个新的列表
b.支持比较运算
比较大小的原理和字符串类似
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(list1 + list2) # [1, 2, 3, 'a', 'b', 'c']
print(list1 * 2) # [1, 2, 3, 1, 2, 3]
print([1, 2, 3] == [2, 1, 3]) # False
print([1, 2, 3] == [1, 2, 3]) # True
# ★了解!
2. in / not in
元素 in 列表 —— 判断列表中是否存在指定的元素
print([1, 2] in [1, 2, 3]) # False
print([1, 2] in [[1, 2], 30, 'abc']) # True
print('abc' in [10, 'abc', True]) # True
3.len
len(列表) —— 获取列表中元素的个数
print(len([[1, 'a'], 2, '100', True])) # 4
4.list
list(数据) —— 将其它数据转换成列表;只有 序列 才可以转换成列表,转换的时候就是将序列中所有的元素转换成列表的元素
★注意 list = 10 # 不能用Python给我们提供的类型的名字来命名,否则后期会有隐患
list1 = list('hello')
print(list1) # ['h', 'e', 'l', 'l', 'o']
list2 = list(range(11, 21))
print(list2) # [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
5.序列的其它方法
max(序列) —— 获取序列中值最大的元素
min(序列) —— 获取序列中值最小的元素
sum(序列) —— 求序列中所有元素的和
注意:以上三种方法,要求序列中的元素类型必须一致,并且这个类型支持比较运算和加法运算(一般数字序列用)
print(max([19, 89, 999, 2, 0.2])) # 999
print(min([19, 89, 999, 2, 0.2])) # 0.2
print(sum([19, 89, 999, 2, 0.2])) # 1109.2
print(sum(range(101))) # 5050
示范
list1 = [1, 2, 3, 1, 100, 20, 30, 1]
print(list1.count(1)) # 3
list1.extend(['abc', 100])
print(list1) # [1, 2, 3, 1, 100, 20, 30, 1, 'abc', 100]
list1.extend('abc')
print(list1) # [1, 2, 3, 1, 100, 20, 30, 1, 'abc', 100, 'a', 'b', 'c']
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
print(list1.index(100)) # 2
list1.reverse()
print(list1) # [1, 30, 20, 100, 1, 3, 100, 2, 1]
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort()
print(list1) # [1, 1, 1, 2, 3, 20, 30, 100, 100]
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list1.sort(reverse=True)
print(list1) # [100, 100, 30, 20, 3, 2, 1, 1, 1]
list1.clear()
print(list1) # []
list1 = [1, 2, 100, 3, 1, 100, 20, 30, 1]
list2 = list1.copy()
list3 = list1[:]
print(list2, list3) # [1, 2, 100, 3, 1, 100, 20, 30, 1] [1, 2, 100, 3, 1, 100, 20, 30, 1]
print(id(list1), id(list2), id(list3)) # 34096432 34776568 34776648
网友评论