课程
/后端开发
/Python
/初识Python
不看这道题的话,我只是单纯的想知道为什么下面这个运行不了,s和l的定义和原题中一样
for x in s:
if x in L:
s.remove(x)
print s
2018-01-22
源自:初识Python 6-10
正在回答
因为你是在s中遍历的,下面有如果存在的话,s中的元素会被删除,意味着s的size变了,因为原来是4个,现在一旦删除就比他少(整个序列就变了),所以他会报错。那个使用for的里面的元素不能变
qq_愿_22 提问者
这个报错是:在迭代中设置变更的大小。我的理解是你的x在s中他的索引范围是比在L这个list的范围小的,因此在判断if语句的时候x的范围已经被for语句给限定死了,所以可以说是超边界了
remove的意思是如果元素在其中则可以删除掉,你这个代码里面并没有判断元素是否在s中,而是判断是否在L中,好,设想一下,如果这个元素在L中出现了,if语句中条件成立,执行下面的代码,把S中的某个元素删除,但这时候如果S中没有这个元素就会出错
如果在s中循环的话,那么所有的元素都会找到,s中数据肯定就不会删除了
举报
学python入门视频教程,让你快速入门并能编写简单的Python程序