假期第(8)天

列表元素增加示例【
02P15.py】
import time
def Insert():
a = []
for i in range(10000):
a.insert(0, i)
def Append():
a = []
for i in range(10000):
a.append(i)
start = time.time()
for i in range(10):
Insert()
print('Insert:', time.time()-start)
start = time.time()
for i in range(10):
Append()
print('Append:', time.time()-start)
列表与列表推导式
运行结果:
Insert: 0.578000068665
Append: 0.03099989891051
6
16
增加列表元素-4
l 使用乘法来扩展列表对象,将列表与整数相乘,生成一
个新列表,新列表是原列表中元素的重复
>>> aList = [3,5,7]
>>> bList = aList
>>> id(aList)
57091464
>>> id(bList)
57091464
>>> aList = aList*3
>>> aList
[3, 5, 7, 3, 5, 7, 3, 5, 7]
>>> bList
[3,5,7]
>>> id(aList)
57092680
>>> id(bList)
57091464
列表与列表推导式1
17
7
增加列表元素-5
l 当使用*运算符将包含列表的列表重复并创建新列表
时,并不
是复制子列表值,而是复制已有元素的引用。
因此,当修改其中一个值时,相应的引用也会被修改
>>> x = [[None] * 2] * 3
>>> x
[[None, None], [None, None], [None, None]]
>>> x[0][0] = 5
>>> x
[[5, None], [5, None], [5, None]]
>>> x = [[1,2,3]] * 3
>>> x[0][0] = 10
>>> x
[[10, 2, 3], [10, 2, 3], [10, 2, 3]]
列表与列表推导式1
8
18
删除列表元素-1
l 使用del命令删除列表中的指定位置上的元素
>>> a_list = [3,5,7,9,11]
>>> del a_list[1]
>>> a_list
[3, 7, 9, 11]
l 列表的pop()方法删除并返回指定位置(默认为最后一个)上的
元素,如果给定的索引超出了列表的范围则抛出异常
>>> a_list = list((3,5,7,9,11))
>>> a_list.pop()
11
>>> a_list
[3, 5, 7, 9]
>>> a_list.pop(1)
5
>>> a_list
[3, 7, 9]
列表与列表推导式19
1
9
删除列表元素-2
l 列表对象的remove()方法删除首次出现的指定元素,
如果列表中不存在要删除的元素,则抛出异常。
>>> a_list = [3,5,7,9,7,11]
>>> a_list.remove(7)
>>> a_list
[3, 5, 9, 7, 11]
列表与列表推导式2
20
0
删除列表元素的分析-1
l 代码编写好后必须要经过反复测试,不能满足于几次
测试结果正确。例如下面代码似乎正确
>>> x = [1,2,1,2,1,2,1,2,1]
>>> for i in x:
if i == 1:
x.remove(i)
>>> x
[2, 2, 2, 2]
l 然而这段代码的逻辑是错误的
>>> x = [1,2,1,2,1,1,1]
>>> for i in x:
if i == 1:
x.remove(i)
>>> x
[2, 2, 1]
列表与列表推导式2
21
1
删除列表元素的分析-2
l 出现这个问题的原因是列表的自动内存管理功能:在
删除列表元素时,Python会自动对列表内存进行收缩,
增加列表元素时也会自动扩展内存。每当插入或删除
一个元素之后,该元素位置后面所有元素的索引就都
改变了。
l 正确的代码:
>>> x = [1,2,1,2,1,1,1]
>>> for i in x[::]:
#切片(浅复制)
if i == 1:
x.remove(i)
l 或者:
>>> x = [1,2,1,2,1,1,1]
>>> for i in range(len(x)-1,-1,-1):
#从后往前删
if x[i]==1:
del x[i]
 
posted @ 2022-01-08 23:55  我的未来姓栗山  阅读(29)  评论(0编辑  收藏  举报