目录
1 列表定义
- 作用:列表可以一次性存储多个数据,且可以为不同数据类型。但是,建议使用同一类型。
- 格式:
变量名=[数据1,数据2,数据3,...]中括号和逗号 - 注意:列表属于可变类型
m=[1.1,"hello",["bingo",10],20]
print(type(m)) # <class 'list'>
print(m) # [1.1, 'hello', ['bingo', 10], 20]
2 列表操作-查
查不改变列表
2.1列表的下标(索引)
- 从0开始,最后一个元素的下标是-1。
【例子】
m=[1.1,"hello",["bingo",10],20]
print(m[2]) # ['bingo', 10]
print(m[-1]) # 20
print(m[2][1]) # 10
2.2 切片
- 语法:
序列[开始位置下标:结束位置下标:步长]不包含结束位置下标。
【例子】
m=[1.1,"hello",["bingo",10],20]
print(m[1:3]) # ['hello', ['bingo', 10]]
print(m[-2:-1]) # [['bingo', 10]]
print(m[1:3:2]) # ['hello']
2.3 index()函数
- 作用:查找指定元素是否在列表中
- 语法:
变量名.index(数据,开始位置下标,结束位置下标),找到就返回第一个匹配项位置下标,找不到报错。和字符串里一样的用法一样。
【例子】
m=[1.1,"hello",["bingo",10],20]
print(m.index(20)) # 3
print(m.index(1)) # 报错
2.4 count()函数
- 作用:统计指定数据在列表中出现的次数。
- 语法:
变量名.count(数据),没有返回0
【例子】
m=[1.1,"hello",["bingo",10,20],20]
print(m.count(20)) # 1
print(m.count(1)) # 0
2.5 len()函数
- 作用:返回列表长度
- 语法:
len(变量名)
【例子】
m=[1.1,"hello",["bingo",10,20],20]
print(len(m)) # 4
3 列表操作-增
增会改变列表
3.1 append()函数
- 作用:在列表结尾追加数据(追加的是单个数据)
- 语法:
变量名.append(数据)
注意:不能一次追加多个数据,增加多个数据是将整个序列追加到序列。
【例子】
m=[1.1,"hello",["bingo",10],20]
m.append('World')
m.append(['haha','hoho']) # [1.1, 'hello', ['bingo', 10], 20, 'World', ['haha', 'hoho']]
print(m)
3.2 extend()函数
- 作用:在列表结尾追加数据(追加多个数据)多个数据要用列表来存
- 语法:
变量名.extend(数据)
【例子】
m=[1.1,"hello",["bingo"],20]
m.extend(['a','b'])
print(m) # [1.1, 'hello', ['bingo'], 20, 'a', 'b']
3.3 insert()函数
- 作用:在指定位置新增数据
- 语法:
变量名.insert(位置下标,数据)
【例子】
m=[1.1,"hello",["bingo"],20]
m.insert(2,'World')
print(m) # [1.1, 'hello', 'World', ['bingo'], 20]
4 列表操作-删
删会改变列表
4.1 del
- 没有下标,删除整个变量名,再打印就没有这个变量名了,要重新写。
- 有下标,删除指定列表位置的数据
- 语法:
del 变量名[下标]
【例子】
m=[1.1,"hello",["bingo"]]
del m[1]
print(m) # [1.1, ['bingo']]
4.2 remove()函数
- 作用:除列表中某个值的第一个匹配项
- 语法:
变量名.remove(指定数据)
【例子】
m=[1.1,1.1"hello",["bingo"]]
m.remove(1.1)
print(m) # [1.1,'hello', ['bingo']]
4.3 pop()函数
- 作用:移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- 语法:
变量名.pop(下标)
【例子】
m=[1.1,"hello",["bingo"]]
s=m.pop()
print(m) # [1.1, 'hello']
print(s) # ['bingo']
4.4 clear()函数
- 作用:清空列表
- 语法:
变量名.clear(),返回结果是[]
【例子】
m=[1.1,"hello",["bingo"]]
m.clear()
print(m) # []
5 列表操作-改
改会变量列表
5.1 修改指定下标数据
m=[1.1,"hello",["bingo"]]
m[1]=2
print(m)
5.2 reverse()函数
- 作用:反向排列列表中元素
- 语法:
变量名.reverse()
m=[1.1,"hello",["bingo"]]
m.reverse()
print(m) # [['bingo'], 'hello', 1.1]
5.3 sort()排序
- 作用:对整个列表进行排序。列表里的数据必须是相同类型的。
- 语法:
变量名.sort(key=None,reverse=False),默认是升序,降序为True。- key :主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse:排序的方式,默认是升序,Ture为降序。
m=[1.1,"hello",["bingo"]]
m.sort(reverse=False)
print(m)
#TypeError: '<' not supported between instances of 'str' and 'float'
------------
m=['nihaoa',"hello",'haha']
m.sort(reverse=False)
print(m) # ['haha', 'hello', 'nihaoa']
----------
m=[1,5,8,9,2,2,10]
m.sort(reverse=True)
print(m) # [10, 9, 8, 5, 2, 2, 1]
-------------------
a=[[6,5],[3,7],[2,8]]
a.sort()
print(a) # [[2, 8], [3, 7], [6, 5]]
6 补充
6.1 列表的深浅拷贝
- 1.直接赋值:两个列表分割不开,一个列表改变另一个列表也随之改变。直接赋值相当于两个不同的列表名,指向就是同一个地址。

list1=['egon','lxx',[1,2]]
list2=list1
print(id(list1),id(list2))
# 2034260507456 2034260507456
- 2.浅拷贝:不能完全分隔开,对于列表中的可变类型数据,一个更改另一个也随之更改。(浅拷贝相当于,拷贝的那个新列表重新拥有一个新的内存地址,里面数据的内存地址还是和之前相同。当被拷贝的列表中的不可变类型数据改变时,因为需要重新一个新的内存地址,所以新列表中的内存地址还是指向原来的不可变类型数据;但是当被拷贝的列表中的可变类型数据发生改变时,因为内存地址不变,所以新列表中的可变类型数据也随之改变(内存地址是一样的)。)

list1=['egon','lxx',[1,2]]
list2=list1.copy()
print(id(list1),id(list2))
list1[0]='Egon'
list1[1]='LXX'
list1[2][0]=111
list1[2][1]=222
print(list1,id(list1[0]),id(list1[1]),id(list1[2]))
print(list2,id(list2[0]),id(list2[1]),id(list2[2]))
'''
2021595675456 2021595955008
['Egon', 'LXX', [111, 222]] 2021595954736 2021595954864 2021595672896
['egon', 'lxx', [111, 222]] 2021595954608 2021595954672 2021595672896
'''
- 3.深拷贝:可以完全分隔开。和浅拷贝不同的,就是对于列表中不同类型的数据,进行区别对待。对于新的拷贝的列表列表中的可变类型数据,会给一个新的内存地址用来存放,这样当被拷贝的列表中的可变类型数据发生改变时,新的列表不会发生改变。
- 语法:
import copy和copy.deepcopy(列表名)

- 语法:
import copy
list1=['egon','lxx',[1,2]]
list2=copy.deepcopy(list1)
print(id(list1),id(list2))
list1[0]='Egon'
list1[1]='LXX'
list1[2][0]=111
list1[2][1]=222
print(list1,id(list1[0]),id(list1[1]),id(list1[2]))
print(list2,id(list2[0]),id(list2[1]),id(list2[2]))
'''
2115233661312 2115233834240
['Egon', 'LXX', [111, 222]] 2115233594800 2115233594992 2115233663552
['egon', 'lxx', [1, 2]] 2115233594672 2115233594736 2115233833600
'''
7 习题
- 1列表操作练习
列表lst 内容如下
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
请写程序完成下列操作:
1 在列表的末尾增加元素15
2.在列表的中间位置插入元素20
3.将列表[2, 5, 6]合并到lst中
4.移除列表中索引为3的元素
5.翻转列表里的所有元素
6.对列表里的元素进行排序,从小到大一次,从大到小一次
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
lst.append(15)
print(lst)
lst.insert(5,20)
print(lst)
lst.extend([2,5,6])
print(lst)
del lst[3]
print(lst)
lst.reverse()
print(lst)
lst.sort(reverse=False)
print(lst)
lst.sort(reverse=True)
print(lst)
'''
[2, 5, 6, 7, 8, 9, 2, 9, 9, 15]
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15]
[2, 5, 6, 7, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
[2, 5, 6, 8, 20, 9, 2, 9, 9, 15, 2, 5, 6]
[6, 5, 2, 15, 9, 9, 2, 9, 20, 8, 6, 5, 2]
[2, 2, 2, 5, 5, 6, 6, 8, 9, 9, 9, 15, 20]
[20, 15, 9, 9, 9, 8, 6, 6, 5, 5, 2, 2, 2]
Process finished with exit code 0
'''
- 2.修改列表
问题描述:
lst = [1, [4, 6], True]
请将列表里所有数字修改成原来的两倍
lst = [1, [4, 6], True]
lst[0]=2
lst[1][0]=8
lst[1][1]=12
print(lst)
# [2, [8, 12], True]
- 3 eetcode 852题 山脉数组的峰顶索引
如果一个数组k符合下面两个属性,则称之为山脉数组
1.数组的长度大于等于3
2.存在 i i i, i i i >0 且 i < len ( k ) − 1 i<\operatorname{len}(k)-1 i<len(k)−1, 使得 k [ 0 ] < k [ 1 ] < … < k [ i − 1 ] < k [ j ] > k [ i + 1 ] … > k [ len ( k ) − 1 ] \mathrm{k}[0]<\mathrm{k}[1]<\ldots<\mathrm{k}[\mathrm{i}-1]<\mathrm{k}[\mathrm{j}]>\mathrm{k}[\mathrm{i}+1] \ldots>\mathrm{k}[\operatorname{len}(\mathrm{k})-1] k[0]<k[1]<…<k[i−1]<k[j]>k[i+1]…>k[len(k)−1]
这个 i i i就是顶峰索引。
现在,给定一个山脉数组,求顶峰索引。
示例:
输入:[1, 3, 4, 5, 3]
输出:True
输入:[1, 2, 4, 6, 4, 5]
输出:False
class Solution(object):
def peakIndexInMountainArray(self, A):
"""
:type A: List[int]
:rtype: int
"""
for i in range(len(A)):
if A[i] > A[i+1]:
return i
本文详细介绍了Python中的列表操作,包括定义、查询、增加、删除和修改等。重点讲解了下标、切片、index()、count()、len()函数,以及append()、extend()、insert()、del、remove()、pop()、clear()、reverse()和sort()等方法。此外,还探讨了列表的深浅拷贝概念。最后,提供了若干练习题加深理解。

被折叠的 条评论
为什么被折叠?



