列表转换为集合后调用symmetric_difference_update为何不生效?
问题原因
核心问题是你调用symmetric_difference_update的对象是临时生成的集合,修改结果没有被保留:
- 执行
set(afternoon)时,仅基于afternoon列表的元素生成了一个全新的临时集合,这个临时集合和原始的afternoon列表没有绑定关系。 symmetric_difference_update是原地修改方法,只会修改调用它的临时集合本身,这个临时集合在方法执行完后没有被赋值给任何变量,直接被内存回收,原始afternoon列表没有发生任何改动。- 最后执行
print(set(afternoon))时,是把完全未改动的原始afternoon列表重新转成集合打印,自然无法得到对称差的预期结果。
正确实现示例
方案1:先将列表转集合存入变量再操作
morning = ['Java', 'C', 'Ruby', 'Lisp', 'C#'] afternoon = ['Python', 'C#', 'Java', 'C', 'Ruby'] afternoon_set = set(afternoon) afternoon_set.symmetric_difference_update(morning) print(afternoon_set) # 输出:{'Python', 'Lisp'}
方案2:直接将变量定义为集合类型
morning = {'Java', 'C', 'Ruby', 'Lisp', 'C#'} afternoon = {'Python', 'C#', 'Java', 'C', 'Ruby'} afternoon.symmetric_difference_update(morning) print(afternoon) # 输出:{'Python', 'Lisp'}
内容的提问来源于stack exchange,提问作者Nam Nguyễn Tường
相关产品推荐
相关产品推荐

