什么是列表(list)
定义:python提供的容器型数据类型。
特点:可变,有序
可变:元素的值,列表长度,元素的顺序(支持增删改)
有序:每个元素通过下标确定位置(切片和索引)
列表的字面量:通过[]括起来,里面有多个元素,每个元素用逗号隔开
注意:元素可以是任意数据类型,元素数据类型可以互不相同
任何类型的数据都可以作为列表的元素
list1 = [339, 'dfdk', True, [1,2,3], {'a':10}, lambda x: 2*x]
print(len(list1))
list2 = [
90,
10.34,
'hello'
]
abc = [1, 10]
list3 = [abc, 20]
print(list3)
一、获取列表元素(语法=字符串)
a.获取单个元素
用法:列表[下标] - 获取列表中指定下标的元素
输出:列表
list1 = [23, 232, 22, 'dfj']
print(list1[0], list1[-1])
b.获取部分元素(切片)
用法:列表[开始下标:结束下标:步长]
输出:列表
注意:切片切不到,结果是空列表[]
遍历:一个一个的取出元素
直接遍历元素:通过for循环直接遍历列表拿到每个元素(操作元素与下标无关)
遍历下标拿到元素:通过遍历列表元素中的下标来遍历列表元素(操作下标与下标有关)
list1 = [23, 232, 22, 'dfj']
# 直接遍历
for item in list1:
print(item)
# 通过下标遍历
for index in range(len(list1)):
print('下标', index)
print(list1[index])
"""
二、 增删改
1.增(添加列表元素)
a.append:
作用:在最后添加指定的元素
用法:列表.append(元素)
注意:这个操作不会产生新列表
anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
anime.append('一圈超人')
print(anime) # ['海贼王', '火影忍者', '一人之下', '秦时明月','一圈超人']
b.insert:
作用:指定下标前插入元素
用法:
列表.insert(下标, 元素) - 指定下标前插入元素
anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
anime.insert(2, '犬夜叉')
print(anime) # ['海贼王', '火影忍者', '犬夜叉','一人之下', '秦时明月']
anime.insert(0, '进阶的巨人')
print(anime) # [ '进阶的巨人','海贼王', '火影忍者', '犬夜叉','一人之下', '秦时明月']
2.删(删除元素)
a.del
作用: 删除指定下标对应的元素
用法:del 列表[下标]
说明:
del:关键字 - 可以删除任何数据
注意:不会产生新的列表,下标会重新分配
下标不能越界,否则会报错
anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
del anime[-2]
print(anime) # ['海贼王', '火影忍者', '秦时明月']
# del anime[100]
# IndexError: list assignment index out of range
# 下标错误:列表元素下标超过范围
b.remove:
用法:
列表.remove(元素) - 删除第一个指定元素
注意:元素重复,只删第一个,而且删除的元素必须存在,否则报错
anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
anime.remove('海贼王')
print(anime) # ['火影忍者', '一人之下', '秦时明月']
c.pop:
用法:
列表.pop() - 将列表中最后一个元素取出
列表.pop(下标) - 将列表中指定下标对应的元素取出
返回值:元素
anime = ['海贼王', '火影忍者', '一人之下', '秦时明月']
del_item = anime.pop() # 默认最后的元素
print(anime) # ['海贼王', '火影忍者', '一人之下']
print(del_item) # 秦时明月
del_item = anime.pop(0) # 指定下标的元素
print(anime) # ['火影忍者', '一人之下']
print(del_item) # 海贼王
坑1:直接遍历元素:
删除序列部分元素,删不去,直接删元素会改变序列的长度
解决办法:
遍历序列的切片(产生新的列表)
坑2 :通过下标取元素:
下标越界和元素不全
解决办法:
while循环来做
当元素要删除,下标值不动
不需删除,下标加1
前提:当列表需要删除时,才考虑坑
# 简写方式:列表[:](切片)== 浅拷贝
for x in age[:]:
if int(x) < 18:
age.remove(x)
print(age)
# 遍历下标
ages = [12, 13, 43, 45, 10]
new_ages = []
index = 0
while index < len(ages):
age = ages[index]
# 判断下标是否加1
if age < 18:
del_item = ages.pop(index)
new_ages.append(del_item)
else:
index += 1 # 不需要删除下标增加
print(ages, new_ages)
3.改(修改元素的值)
用法:
列表[下标] = 新值 - 修改指定下标对应的值
list1 = [1, 2, 2, 4]
list1[0] = 'dadf'
print(list1) # ['dadf', 2, 2, 4]
三、列表相关运算
1. 相关运算:+, *
+:
列表1 + 列表2 - 将两个列表的元素进行拼接,产生一个新的列表
*:
列表*n - 将列表中的元素重复n次,产生一个新的列表
b.支持比较运算
和字符串的原理类似
每对元素的类型要一样*
2 in / not in (强调!!!!)
元素 in 列表 - 判断列表中是否存在指定的元素
和字符串不同,元素
元素 not in 列表 - 判断列表中是否存在指定的元素
应用:判断一个列表的元素是否存在于另一个列表中
print([1, 2] in [1, 2, 3]) # False
print([1, 2] in [[1, 2], 30, 'abc']) # True
print([1, 2] not in [1, 2, 3]) # True
3 list
list(数据) - 将其他类型的数据转换成列表;
数据是否能转? - 只有序列才能转换成列表
怎么转? - 使用list(数据)
原理:将序列中所有的元素转换成列表的元素
注意:不能用类型名来作为变量名,否则会有隐患
list1 = list('hello')
print(list1) # ['h', 'e', 'l', 'l', 'o']
str1 = str(list1) # 字符串只是单纯的在外面加‘’
print(str1)
4 序列其他方法
max(序列) - 获取序列中最大的元素
min(序列) - 获取序列中最小的元素
sum(序列) - 求序列中所有元素的和
要求:序列中的元素类型必须一致,并且类型支持比较运算和
加法运算,一般是(数字序列)
print(max([12, 244, 431, 343])) # 431
print(min([12, 244, 431, 343])) # 12
print(sum([12, 244, 431, 343])) # 1030
print(sum(range(101))) # 5050
四、列表内置函数
通过- > 列表.函数名() 来调用
| 序号 | 函数名 | 作用 |
|---|---|---|
| 1 | count(obj) | 统计某元素在列表中出现的次数 |
| 2 | extend(seq) | 在列表末尾一次追加另一个列表中的多个值 |
| 3 | index(obj) | 获取元素在列表中第一个匹配的下标值 |
| 4 | reverse() | 将列表元素反向 |
| 5 | sort(cmp=None, key=None, reverse=False) | 将列表元素进行排序 |
| 6 | clear() | 将列表清空 |
| 7 | copy | 复制列表(顶层) |
1.count(obj)
作用:统计某元素在列表中出现的次数
输入:列表中的元素
输出:数字
list1 = [12, 32, 4, 23, 44, 12, 45, 8, 23]
print(list1.count(12)) # 2
2.extend(seq)
作用:在列表末尾追加另一个序列的所有元素
输入:序列
输出:None
注意:该方法没有返回值,只会直接在列表末添加元素
list1 = [12, 34, 48, 23, 45]
list2 = ['abc', '这谁好帅']
print(list1.extend(list2)) # None
print(list1) # [12, 34, 48, 23, 45, 'abc', '这谁好帅']
3.index(obj)
作用:获取元素在列表中第一个匹配的下标值
输入:元素
输出:数字
list1 = ['这是谁', '好帅', '低调', '好的', '好烦', '帅了一生']
print(list1.index('好帅')) # 1
4.reverse()
作用:将列表元素反向
输出:None
注意:该方法没有返回值,只会将原列表反向
list1 = ['这是谁', '好帅', '低调点', '好的', '好烦', '帅了一生']
print(list1.reverse()) # None
print(list1) # ['帅了一生', '好烦', '好的', '低调点', '好帅', '这是谁']
5.sort(cmp=None, key=None, reverse=False)
作用:对列表元素进行排序
说明:
reverse:反向
输出:None
注意:该方法没有返回值,只会将原列表进行修改
list1 = [12, 32, 4, 3, 44, 222, 45, 8, 13]
print(list1.sort()) # None
print(list1) # [3, 4, 8, 12, 13, 32, 44, 45, 222]
print(list1.sort(reverse=True)) # None
print(list1) # [222, 45, 44, 32, 13, 12, 8, 4, 3]
6.clear()
作用: 清空列表
输出:None
注意:该方法没有返回值,只会将原列表进行修改
list1 = [12, 32, 4, 3, 44, 222, 45, 8, 13]
print(list1.clear()) #
print(list1) # []
7.copy
作用: 复制列表
输出:一个新的列表
list1 = [12, 32, 4, 3, 44, 222, 45, 8, 13]
print(list1.copy())
# [12, 32, 4, 3, 44, 222, 45, 8, 13]