zhzhx 发表于 2022-12-12 13:59

对一个 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)

输出结果:


平淡最真 发表于 2022-12-12 14:07

datas =

甜萝 发表于 2022-12-12 14:29

# 初始化一个 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)

看床走不动路 发表于 2022-12-12 17:16

paypojie 发表于 2022-12-12 14:29
# 初始化一个 list 列表
datas =



看到层主弄了662行代码,菜逼被吓了两大跳

甜萝 发表于 2022-12-12 17:19

看床走不动路 发表于 2022-12-12 17:16
看到层主弄了662行代码,菜逼被吓了两大跳

代码行数代表不了什么

bigdogxh 发表于 2022-12-12 17:41

本帖最后由 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)

切片的特征:

[*]切片是根据索引进行截取,有序序列才有索引,必须针对有序序列(字符串、列表、元组)
[*]截取是包头不包尾(可以理解为前闭后开)
[*]截取有步长(隔几个元素截取一次)
[*]可以从前往后截取,也可以从后往前截取。区别就是一个步长是正,一个步长是负(这句话很重要)
[*]切片后的列表是一个新的对象,指向新的内存地址,属于深拷贝
[*]切片后的列表中的元素不是新的对象,是跟被切片的列表元素指向同一内存地址,属于浅拷贝


bigdogxh 发表于 2022-12-12 17:49

平淡最真 发表于 2022-12-12 14:07


这是重新生成了一个列表,不是删除吧。

马了顶大 发表于 2022-12-12 19:34

# 初始化一个 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]
查看完整版本: 对一个 list 数据类型写一个循环删除的程序