s=[0,0,5,3]
for x in s:
if x==0
s.remove(x)
结果为什么是[0,5,3]而不是[5,3]呢?
回复内容:
初始s[0] = 0, s[1] = 0, s[2] = 5, s[3] = 3for执行第一次的时候,
x = s[0], 也就是 x = 0 然后将这个元素剔除,
s变成了[0, 5, 3], 也就是 s[0] = 0, s[1] = 5, s[2] = 3
for 执行第二次的时候,
x = s[1], 也就是 x = 5
因为x不是0,s不变
造成出现你这个结果的原因是列表s在运算过程中发生了变化.
合理的方法是将不是0的的元素重新放到一个新列表里面
<span class="k">print</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">s</span> <span class="k">if</span> <span class="n">x</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">]</span>
循环时尽量不要对list进行增,删操作
不要在循环中对数组进行变更操作,重要的事情我也不愿意说三次了。
洛克正解,不过手痒,也来分享一下我的看法吧在for x in s:中的s是你迭代的列表, 而在迭代中, 你又使用了s.remove(x), 这一行代码修改了原来的列表s, 这样, 第二次执行"for x in s:"的时候, 这里的s和第一次执行的已经不是同一个列表了, 第一次s = [0, 0, 5, 3], 第二次s = [0, 5, 3], 但是, 他们使用的下标却又是同一组的下标, 即第一次下标为0, 第二次下标为1, 那么, 对应两次的列表s, 可知, 第一次s[0]为0, 第二次s[1]为2(对应第二个s)
所以, 这个很容易犯的错误, 就是因为迭代的列表发生了变化, 因此在python的迭代中, 一定不要修改列表(这里提一个你以后会犯的错误--列表的可变性和多引用, 导致修改其他列表时会改变原列表的问题)
那么, 除了洛克的列表推倒式(python中最好用, 最具特色, 最X炸天的技巧, 你必须要会哦), 其他解法:
1.)新建一个列表result = [], 保存符合条件的值result.append(x), 这样就没有修改原列表了
2.)使用a = s, 然后迭代a, for x in a:, 再使用s.remove(x)修改列表s, 那恭喜你, 你错了, 就是上面提到的多引用问题, 这个自己去好好看文档弄明白吧
最后如果看不太明白, 那分享一句话"书读百遍, 其义自见" @洛克 的解释很正确,但是方法可以改进。
这其实更适合通过 Python 的 filter 来解决:
<span class="c">#!/usr/bin/env python3</span>
<span class="k">def</span> <span class="nf">check_number</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">True</span>
<span class="n">s</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span>
<span class="k">print</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">check_number</span><span class="p">,</span><span class="n">s</span><span class="p">))</span>
<span class="n">s</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span>
<span class="k">print</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">s</span><span class="p">))</span>
s = [i for i in s if i != 0]
#手机码字,对付看吧官方文档里有很好的例子,就在2.7版本的list章节。
循环时不实用原列单a[],而是使用a[:]
这个方法最简单,也不需要增加额外的代码。
另外,@黑溜儿 的问题很好,@洛克 的解释是对的。因为for循环的时候不是先获得列单长度,这样效率太低了。for是通过iter迭代器实现的,所以是动态的按下标迭代直到结尾。
Life is short, I use python. s已经不是原来的s,x确实原来的x 这样解释的话,循环体会执行四次,那第四次应该是数组越界了,为毛不报错?python是怎么个检查机制?

Kernelsecuritycheckfailure(内核检查失败)就是一个比较常见的停止代码类型,可蓝屏错误出现不管是什么原因都让很多的有用户们十分的苦恼,下面就让本站来为用户们来仔细的介绍一下17种解决方法吧。kernel_security_check_failure蓝屏的17种解决方法方法1:移除全部外部设备当您使用的任何外部设备与您的Windows版本不兼容时,则可能会发生Kernelsecuritycheckfailure蓝屏错误。为此,您需要在尝试重新启动计算机之前拔下全部外部设备。

在C语言中,if语句通常用于基于单个条件执行特定代码块。但是,通过使用逻辑运算符(如 &&、|| 和 !),可以组合多个条件来进行判断。包括使用逻辑与(&&)判断多个条件、使用逻辑或(||)判断至少一个条件、使用逻辑非(!)判断单个条件的否定,以及嵌套if语句和使用括号明确优先级。

Win10skype可以卸载吗是很多用户们都想知道的一个问题,因为很多的用户们发现自己电脑上的默认程序上有这个应用,担心删除后会影响到系统的运行,下面就让本站来为用户们来仔细的介绍一下Win10如何卸载SkypeforBusiness吧。Win10如何卸载SkypeforBusiness1、在电脑桌面点击Windows图标,再点击设置图标进入。2、点击“应用”。3、在搜索框中输入“Skype”,点击选中找到的结果。4、点击“卸载”。5

随着国际化的不断发展,越来越多的网站和应用程序需要支持多语言切换功能。Vue作为一款流行的前端框架,提供了一种名为i18n的插件,可以帮助我们实现多语言切换。本文将介绍Vue中使用i18n实现多语言切换的常见技巧。第一步:安装i18n插件首先,我们需要使用npm或yarn安装i18n插件。在命令行中输入以下命令:npminst

out接口指的是输出接口,in接口指的是输入接口。out接口一般代表着音源线路输出接口,用来接负载,例音箱、耳机等;而in接口一般代表着音源线路输入接口,用来接CD机、手机、MP3、电脑等。

remove是从数据结构中删除一个元素、节点或字符的意思,具体的实现方式取决于所使用的编程语言和数据结构。无论是数组、链表还是字符串,remove操作都是程序员经常使用的操作之一,对于数据处理和算法实现都非常重要。

使用C#中的StringBuilder.Remove函数删除字符串中的指定部分在C#中,StringBuilder类是一个可变的字符串类型,它允许我们进行字符串的修改和操作。而StringBuilder的Remove函数提供了一种方便的方式来删除字符串中的指定部分。StringBuilder.Remove函数的用法如下:publicStringBuilde

一、if语句介绍if语句是一种分支结构语句,根据条件执行不同的操作。if语句通常由一个条件表达式和一条或多条语句组成。如果条件表达式的值为真,那么执行if语句中的语句;否则,跳过if语句块。if语句的语法如下:if(condition)thenstatement;elsestatement;endif;其中,condition为条件表达式,statement为需要执行的SQL语句。二、if嵌套语句介绍if嵌套语句是指在一个if语句块中,再嵌套一个或多个if语句块,用于根据不同的条件执行不同的操作


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

禅工作室 13.0.1
功能强大的PHP集成开发环境