当前位置: 首页 > 知识库问答 >
问题:

德尔到底在这里做什么?[重复]

锺离韬
2023-03-14

我正在学习python,我想创建一些代码,这些代码将获取列表列表,检查每一行对于给定的索引号是否有特定的值,如果有,则删除整行。现在我直觉地决定使用del删除行,但是当我打印出带有删除值的列表时,我得到了相同的列表。我添加了一个计数器来检查是否有任何行具有要删除的值,并且它们确实存在。以下代码说明了我遇到的问题:

test_list=[1,2,3,4,5]
for element in test_list:
    if element == 1:
        del element
print (test_list)

输出

[1,2,3,4,5]

如果不删除此处的元素,del的功能是什么?

共有3个答案

孔志强
2023-03-14

您正在删除一个名为元素的临时变量,它是在test_list的每次迭代中创建的。

如果要从列表中删除项目,请使用removedel list[index]

详情如下:https://www.tutorialspoint.com/python/list_remove.htm
如何按索引从列表中删除元素?
有没有简单的方法按值删除列表元素?

轩辕欣可
2023-03-14

del正在删除对对象元素的引用。它不是对列表元素的引用。

许承悦
2023-03-14

实际上,del在您的代码中什么都不做。它只是删除迭代变量的本地绑定(而不是列表元素,即使它们指向相同的对象)。这对列表没有影响,无论如何,在下一次迭代中,变量将被分配给下一个值。

对于一般情况,如果您想使用del删除列表中的某个元素(并且您不知道该元素的位置),则必须执行以下操作:

delete_me = 1
for i in range(len(test_list)-1, -1, -1):
    if test_list[i] == delete_me:
        del test_list[i]

注意del是如何为列表工作的,以及我们需要反向遍历列表以避免在迭代列表的同时修改列表时出现问题的事实。

不过,有一种更简单的方法——根本不使用del,而是使用列表理解:

delete_me = 1
test_list = [x for x in test_list if x != delete_me]
 类似资料:
  • 问题内容: 在Tour of Go网站的go 1.5发行之前的版本中,有一段代码看起来像这样。 输出看起来像这样: 令我困扰的是,将其删除后,该程序不再显示“世界”。 为什么呢?如何影响执行力? 问题答案: 注意: 从Go 1.5开始,将GOMAXPROCS设置为硬件内核数:golang.org/doc/go1.5#runtime,低于1.5之前的原始答案。 当您在未指定GOMAXPROCS环境变

  • 根据几个因素(包括OS/浏览器组合),WebDriver可能等待或不等待页面加载。在某些情况下,WebDriver可能会在页面完成加载或甚至开始加载之前返回控制 有人能解释一下在什么情况下WebDriver会在页面完成甚至开始加载之前返回控制吗?

  • 我有一个Spring Boot后端,我刚刚解决了从Angular frontend上传文件时的“ERR_CONNECTION_RESET”问题,方法是配置Tomcat属性。我想弄清楚它到底是做什么的。Tomcat文档对我来说并不明显: 对于中止的上载,Tomcat将吞下的最大请求主体字节数(不包括传输编码开销)。中止上载是指Tomcat知道请求正文将被忽略,但客户端仍然发送它。如果Tomcat没有

  • 问题内容: 我致力于将Google Analytics(分析)和GCM服务添加到当前应用中。在两种服务实施指南中,Google要求开发人员生成一个json文件:google- services.json并将其放在应用程序的根目录下。 我发现,即使我从应用程序中删除了该json文件,该服务仍然有效。 只想确定一下,该文件的真正用途是什么?它的用法是什么以及如何工作? 问题答案: 我对google-s

  • 问题内容: 我在Python文档的FileObjects中找到了这个: flush()不一定会将文件的数据写入磁盘。使用flush()和os.fsync()来确保此行为。 所以我的问题是:Python到底在做什么?我以为这会强制将数据写入磁盘,但现在我知道并没有。为什么? 问题答案: 通常涉及两个级别的缓冲: 内部缓冲器 操作系统缓冲区 内部缓冲区是由您要针对其进行编程的运行时/库/语言创建的缓冲

  • 问题内容: 我对java8流中和方法之间的区别感到困惑。例如, 我得到空的输出在这里,但如果我改变地图就像 我可以得到 {1 = 1,2 = 2} 为什么只是没有运行方法?它们之间有什么区别? 问题答案: 什么都不做,因为在执行终端操作之前不会处理流管道。因此,残留物为空。 在流管道中添加终端操作将导致针对终端操作所需的每个元素执行操作(某些终端操作仅需要一个元素,而其他终端操作则需要的所有元素)