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

关于“更新set”的作业

作业任务如下:

针对下面的set,给定一个list,对list中的每一个元素,如果在set中,就将其删除,如果不在set中,就添加进去。

s = set(['Adam', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']

我的代码是:

s = set(['Adam', 'Lisa', 'Paul'])

L = ['Adam', 'Lisa', 'Bart', 'Paul']

    for y in L:

      for x in s:

        if y==x:

            s.remove(x)

        else:

            s.add(y)

 

 

 结果就出错了:

Traceback (most recent call last):

  File "<pyshell#54>", line 2, in <module>

    for x in s:

RuntimeError: Set changed size during iteration


正在回答

3 回答

for y in L:    于s,L定义是平级的  不要加4个空格

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

ninebean90 提问者

非常感谢!
2016-08-27 回复 有任何疑惑可以回复我~
#2

ninebean90 提问者

>>> s=set(['Adam','Paul']) >>> L=['Adam','Lisa','Bart','Paul'] >>> for y in L: for x in s: if y==x: s.remove(x) else: s.add(y) for x in s: RuntimeError: Set changed size during iteration
2016-08-27 回复 有任何疑惑可以回复我~
#3

ninebean90 提问者

还是有问题
2016-08-27 回复 有任何疑惑可以回复我~
#4

慕慕0567836 回复 ninebean90 提问者

for 循环的时候不要修改被循环的对象,添加及删除被循环对象的元素会出现意想不到的问题
2016-08-27 回复 有任何疑惑可以回复我~
查看1条回复

这样写就算运行正确结果也肯定错了:

  1. set属于无序列表,你这样每次直接往里面插入或者删除数据后,序列肯定会有变化

  2. 按照你这样循环属于死循环,例如第一次循环,你就给s中新增了 'Lisa', 'Paul',s就变成set(['Lisa', 'Paul', 'Lisa', 'Paul']),按照这样就陷入了死循环,你可以自己推一下就知道了

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

ninebean90 提问者

不太明白,可以详细讲一下为什么会给s新增‘Lisa’,‘Paul’么?
2016-11-25 回复 有任何疑惑可以回复我~

for y in L:   前面多家了空格

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

举报

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

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

进入课程

关于“更新set”的作业

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