为了账号安全,请及时绑定邮箱和手机立即绑定

大神帮我看下下面这个为什么运行不liao

不看这道题的话,我只是单纯的想知道为什么下面这个运行不了,s和l的定义和原题中一样

for x in s:

    if x in L:

        s.remove(x)

print s

正在回答

4 回答

因为你是在s中遍历的,下面有如果存在的话,s中的元素会被删除,意味着s的size变了,因为原来是4个,现在一旦删除就比他少(整个序列就变了),所以他会报错。那个使用for的里面的元素不能变

0 回复 有任何疑惑可以回复我~
#1

qq_愿_22 提问者

非常感谢!
2018-02-07 回复 有任何疑惑可以回复我~

这个报错是:在迭代中设置变更的大小。我的理解是你的x在s中他的索引范围是比在L这个list的范围小的,因此在判断if语句的时候x的范围已经被for语句给限定死了,所以可以说是超边界了

0 回复 有任何疑惑可以回复我~

remove的意思是如果元素在其中则可以删除掉,你这个代码里面并没有判断元素是否在s中,而是判断是否在L中,好,设想一下,如果这个元素在L中出现了,if语句中条件成立,执行下面的代码,把S中的某个元素删除,但这时候如果S中没有这个元素就会出错

0 回复 有任何疑惑可以回复我~
#1

qq_愿_22 提问者

s和l的定义和原题一样,原题是s=set(['Adam','Lisa','Paul']) L=['Adam','Lisa','Bart','Paul'] s的所有元素L里都有,所以应该不存在这个问题吧
2018-01-22 回复 有任何疑惑可以回复我~

如果在s中循环的话,那么所有的元素都会找到,s中数据肯定就不会删除了

0 回复 有任何疑惑可以回复我~
#1

qq_愿_22 提问者

就是因为所有元素都能找到,所以所有元素都会被remove掉啊
2018-01-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758623    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

大神帮我看下下面这个为什么运行不liao

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信