列表的主要方法
- 切片取值:
li=[1,3,5,7,9]
print(li[1:3])
输出:
[3, 5]
- 索引取值:
li=[1,3,5,7,9]
print(li[3])
输出:
7
- 判断存在,输出布尔值
li=[1,3,5,7,9]
print(11 in li)
输出:
False
- 向列表添加单个:添加到末尾
li=[]
for i in range(10):
if i > 5:
li.append(i)
print(li)
输出:
[6, 7, 8, 9]
list.extend(seq)
向列表添加多个元素:list.expand(value):value可为字符串,列表,字典
li=[1,2,3,4,1,1,1,13,3,3]
li.extend(['a','b','c'])
print(li)
#不可赋值,否则输出none
eg:
li=[1,2,3,4,1,1,1,13,3,3]
li2=li.extend(['a','b','c'])
print(li2)
输出:None
- 清空列表:list.clear
- 赋值,拷贝
用内存地址的方法辨析赋值,浅拷贝,深拷贝
赋值:
a=[1,2,3]
b=a
print('id a:',id(a))
print('id b:',id(b))
输出:
id a: 56195312
id b: 56195312
#内存地址是一样的,证明赋值后a和b是一个东西
a=[1,2,3]
b=a
print('id a:',id(a))
print('id b:',id(b))
#a改变 b也改变
a.append(4)
print(a,b)
输出
[1, 2, 3, 4] [1, 2, 3, 4]
浅拷贝:
a=[1,2,3,['m','n']]
b=a.copy()
print('id a:',id(a))
print('id b',id(b))
输出:
#浅拷贝a和b的外层内存地址是不一样的
id a: 47265712
id b: 56719560
print('id a[3]',id(a[3]))
print('id b[3]',id(b[3]))
输出:
#a和b的内层内存地址是一样的
id a[3] 56691688
id b[3] 56691688
#浅拷贝改变a的外层,b不会随之变化,因为他们的外层是两个独立的个体,互不影响
a=[1,2,3,['m','n']]
b=a.copy()
a[1]=8
print('a',a)
print('b',b)
#改变a的外层,b不随之变化
a [1, 8, 3, ['m', 'n']]
b [1, 2, 3, ['m', 'n']]
#改变a的内层,b会随之变化,因为浅拷贝后ab的内层在一个内存地址里
a=[1,2,3,['m','n']]
b=a.copy()
a[3][0]='k' #改变a的内层
print('a',a)
print('b',b)
输出:
a [1, 2, 3, ['k', 'n']]
b [1, 2, 3, ['k', 'n']]
深拷贝:需要引入copy模块
与浅拷贝的区别是:深拷贝后,ab的内层地址和外层地址都不一样,任意一个变化不会意向另一个
总结:
赋值:b=a, 赋值后ab内存地址一样,任意一个变化,另一个随之变化
浅拷贝:b=a.copy(), 浅拷贝后,ab外层内存地址不一样,任意一个外层变化不会影响另一个。浅拷贝后,ab内层内存地址一样,任意一个内层变化会影响另一个。
深拷贝:import copy b=copy.deepcopy(a) 深拷贝后,ab的内层外层内存地址都不一样,相互独立,任意一个变化不会影响第二个
- Count 计算元素出现的次数 list.count(‘value’)
li=[1,2,3,4,1,1,1,13,3,3]
print(li.count(3))
输出:
3
- list.remove(‘value’) 从列表中删除值:只能删除一个value
li=[1,2,3,4,1,1,1,13,3,3]
li.remove(3)
print(li)
输出:
[1, 2, 4, 1, 1, 1, 13, 3, 3]
- list.reverse():将当前表翻转
li=[1,2,3,4,5]
li.reverse()
print(li)
输出:
[5, 4, 3, 2, 1]
- list.sort()
#默认升序
li=[1,7,9,4,5]
li.sort()
print(li)
输出:
[1, 4, 5, 7, 9]
#降序:添加关键字 reverse=1/True
li=[1,7,9,4,5]
li.sort(reverse=1)
print(li)
输出:
[9, 7, 5, 4, 1]