吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1033|回复: 7
收起左侧

[学习记录] 对一个 list 数据类型写一个循环删除的程序

[复制链接]
zhzhx 发表于 2022-12-12 13:59


[Python] 纯文本查看 复制代码
# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]
 
# 打印原数组元素,方便对比
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)


输出结果:
QQ截图20221212135838.png

QQ截图20221212135847.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

平淡最真 发表于 2022-12-12 14:07
[Asm] 纯文本查看 复制代码
datas = [1,3,4,10,5,3,7,6,9,8]
[i for i in datas if i%2!=0]
甜萝 发表于 2022-12-12 14:29
[Python] 纯文本查看 复制代码
# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]
  
# 打印原数组元素,方便对比
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)

image.png
看床走不动路 发表于 2022-12-12 17:16
paypojie 发表于 2022-12-12 14:29
[mw_shl_code=python,true]# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]
  

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

代码行数代表不了什么
bigdogxh 发表于 2022-12-12 17:41
本帖最后由 bigdogxh 于 2022-12-12 17:45 编辑

代码是对的,理解有问题。
[Python] 纯文本查看 复制代码
tmp = datas[:]

切片后的tmp对象是一个列表,指向新的内存地址,属于深拷贝。
tmp中的元素不是新的对象,是与被切片的列表元素指向同一内存地址,属于浅拷贝。

[Python] 纯文本查看 复制代码
if not (tmp is datas):  # not False判断两个列表指向不同的内存地址
    if tmp[0] is datas[0]:  # 判断两个列表中的元素指向同一内存地址
        print("同一元素") 

直接在原列表中删除元素没有问题,data是通过tmp切片访问的,删除datas中的元素,不会影响tmp中元素的排列。

[Python] 纯文本查看 复制代码
datas.remove(data)

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


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

这是重新生成了一个列表,不是删除吧。
马了顶大 发表于 2022-12-12 19:34
[Python] 纯文本查看 复制代码
# 初始化一个 list 列表
datas = [1, 3, 4, 10, 5, 3, 7, 6, 9, 8]

# 打印原数组元素,方便对比
print('原 datas 列表的元素为:')
print(datas)

i = 0
while i < len(datas):
    if datas[i] % 2 == 0:
        datas.remove(datas[i])
        i -= 1
    i += 1

print('\n删除后的 datas 的元素为:')
print(datas)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表