列表list
列表可以存储多个不同类型的数据,存储的是每一个数据对象的引用,类似于其他语言的数组概念
创建列表,两种方式
- 使用[]
lst = ['1', '2']
- 使用内置函数list()
lst2 = list(['1', '2'])
列表的特点
- 列表数据有序排列
- 索引映射唯一一个数据,索引从左到右,是从0开始,索引从右到左,是从-1开始
- 可以存储重复的数据
- 任意类型数据混存
- 根据需要动态分配和回收内存
index(): 获取某列表元素在列表中的索引
list1 = ['hello1', 'hello2', 'hello3', 'hello']
print(list1.index('hello')) # 只返回找到的第一个元素的索引
# print(list1.index('hell')) # 若元素不存在,抛出ValueError
print(list1.index('hello', 1, 4)) # 可指定查找范围,不包括end
根据索引获取列表中某个元素
print(list1[-2]) # 输出‘hello3’
print(list1[3]) # 输出‘hello’
# print(list1[-7]) # 索引超出范围,抛出异常IndexError
获取列表中的多个元素:切片操作
语法:列表名[start: stop: step]
start:默认为0
stop:不包括stop索引元素,不写截到末尾
step:默认为1
list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 对原列表的拷贝,生成新列表和原列表引用id不一样
print(list2[1:5:1]) # 输出[2, 3, 4, 5]
print(list2[:2]) # 输出[1, 2]
print(list2[::]) # 输出[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list2[1::]) # 输出[2, 3, 4, 5, 6, 7, 8, 9, 10]
# 步长为负数,倒序切片输出
print(list2[::-1]) # 输出[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(list2[10::-1]) # 输出[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(list2[5::-1]) # 输出[6, 5, 4, 3, 2, 1]
print(list2[::-2]) # 输出[10, 8, 6, 4, 2]
判断某元素是否存在在列表中,in / not in
print(1 in list2) # True
print(1 not in list2) # False
遍历列表的元素
for item in list2:
print(item, end='\t')
# 输出[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
列表元素的增删改操作
增加操作
1. append():列表末尾追加一个元素
list2.append(11)
print(list2)
# 输出[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
2. extend():列表末尾追加一个或多个元素
list2.extend(list1)
print(list2)
# 输出[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 'hello1', 'hello2', 'hello3', 'hello']
3. insert():在任意位置插入一个元素,之后的元素顺序后移
list2.insert(1, 122)
print(list2)
# 输出[1, 122, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 'hello1', 'hello2', 'hello3', 'hello']
4. 切片操作:在任意位置添加多个元素,先切片后替换被切掉的部分
list2[:5:] = list1
print(list2)
# 输出:['hello1', 'hello2', 'hello3', 'hello', 5, 6, 7, 8, 9, 10, 11, 'hello1', 'hello2', 'hello3', 'hello']
删除操作
1.remove():删除一个指定元素
list2.remove('hello') # 只删除第一个,不存在则报错ValueError
print(list2)
# 输出['hello1', 'hello2', 'hello3', 5, 6, 7, 8, 9, 10, 11, 'hello1', 'hello2', 'hello3', 'hello']
2.pop():根据索引删除元素,不写索引默认删除末位元素,指定索引不存在,抛出异常IndexError
list2.pop(1)
print(list2)
# 输出['hello1', 'hello3', 5, 6, 7, 8, 9, 10, 11, 'hello1', 'hello2', 'hello3', 'hello']
3.切片操作:一次至少删除1个元素,产生新的列表对象
newList = list2[1:3]
print(newList) # 输出['hello3', 5]
# 不生成新对象,操作原数组
list2[1:3] = []
print(list2) # 输出['hello1', 6, 7, 8, 9, 10, 11, 'hello1', 'hello2', 'hello3', 'hello']
4.clear():清空列表
list2.clear()
print(list2) # 输出[]
5.del:删除列表
del list2
# print(list2) # NameError: name 'list2' is not defined
修改操作
1. 修改指定索引的元素
list2 = [1, 2, 3, 4, 5]
list2[2] = 100
print(list2) # 输出[1, 2, 100, 4, 5]
2. 切片替换
list2[1:2] = [10, 20, 30]
print(list2) # 输出[1, 10, 20, 30, 100, 4, 5]
排序操作
1.sort(): 默认从小到大排序,指定reverse=True,降序,操作的是原列表
list3 = [11, 15, 2, 8, 5, 4, 6, 3]
list3.sort()
print(list3) # [2, 3, 4, 5, 6, 8, 11, 15]
list3.sort(reverse=True)
print(list3) # [15, 11, 8, 6, 5, 4, 3, 2]
2.sorted():内置函数;默认从小到大排序,指定reverse=True,降序;原列表不变,生成新列表
list4 = [11, 15, 2, 8, 5, 4, 6, 3]
nl = sorted(list4)
print(nl) # [2, 3, 4, 5, 6, 8, 11, 15]
nl = sorted(list4, reverse=True)
print(nl) # [15, 11, 8, 6, 5, 4, 3, 2]
列表生成式(列表元素有规则)
语法:[i*i for i in range(1, 10)]
i*i:列表元素的表达式,通常包括自定义变量
i:自定义变量
range(1, 10):可迭代的对象
list5 = [i*i for i in range(1, 10)]
print(list5) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
list6 = [i*2 for i in range(1, 6)]
print(list6) # [2, 4, 6, 8, 10]