对一个 list 数据类型写一个循环删除的程序
# 初始化一个 list 列表
datas =
# 打印原数组元素,方便对比
print('原 datas 列表的元素为:')
print(datas)
# 定义一个空的 list 列表,来储存要删除的 datas 的元素
datas_del = []
#使用 for 遍历
#[:]作用相当于拷贝了一份
for data in datas[:]:
# 现在我们需要删除偶数的元素
if data % 2 == 0:
# 不直接删除,将需要删除的元素,存入 datas_del 中
datas.remove(data)
print('\n删除后的 datas 的元素为:')
print(datas)
输出结果:
datas =
# 初始化一个 list 列表
datas =
# 打印原数组元素,方便对比
print('原 datas 列表的元素为:')
print(datas)
# 定义一个空的 list 列表,来储存要删除的 datas 的元素
datas_del = []
#使用 for 遍历
#[:]作用相当于拷贝了一份
for data in datas[:]:
# 现在我们需要删除偶数的元素
if data % 2 == 0:
# 不直接删除,将需要删除的元素,存入 datas_del 中
datas_del.append(data)
# 删掉列表datas中的偶数元素
datas.remove(data)
print('\n删除后的 datas 的元素为:')
print(datas)
print('被删掉的元素')
print(datas_del)
paypojie 发表于 2022-12-12 14:29
# 初始化一个 list 列表
datas =
看到层主弄了662行代码,菜逼被吓了两大跳 看床走不动路 发表于 2022-12-12 17:16
看到层主弄了662行代码,菜逼被吓了两大跳
代码行数代表不了什么 本帖最后由 bigdogxh 于 2022-12-12 17:45 编辑
代码是对的,理解有问题。
tmp = datas[:]
切片后的tmp对象是一个列表,指向新的内存地址,属于深拷贝。
tmp中的元素不是新的对象,是与被切片的列表元素指向同一内存地址,属于浅拷贝。
if not (tmp is datas):# not False判断两个列表指向不同的内存地址
if tmp is datas:# 判断两个列表中的元素指向同一内存地址
print("同一元素")
直接在原列表中删除元素没有问题,data是通过tmp切片访问的,删除datas中的元素,不会影响tmp中元素的排列。
datas.remove(data)
切片的特征:
[*]切片是根据索引进行截取,有序序列才有索引,必须针对有序序列(字符串、列表、元组)
[*]截取是包头不包尾(可以理解为前闭后开)
[*]截取有步长(隔几个元素截取一次)
[*]可以从前往后截取,也可以从后往前截取。区别就是一个步长是正,一个步长是负(这句话很重要)
[*]切片后的列表是一个新的对象,指向新的内存地址,属于深拷贝
[*]切片后的列表中的元素不是新的对象,是跟被切片的列表元素指向同一内存地址,属于浅拷贝
平淡最真 发表于 2022-12-12 14:07
这是重新生成了一个列表,不是删除吧。 # 初始化一个 list 列表
datas =
# 打印原数组元素,方便对比
print('原 datas 列表的元素为:')
print(datas)
i = 0
while i < len(datas):
if datas % 2 == 0:
datas.remove(datas)
i -= 1
i += 1
print('\n删除后的 datas 的元素为:')
print(datas)
页:
[1]