Python集合与双端队列初始化及添加元素的语法差异疑问
Python集合初始化的几个疑问解答
1. 方括号是不是让对象变成可迭代类型?
不是。[amount]是把单个整数amount放进了列表里,而列表本身就是Python内置的可迭代类型。set()构造函数要求传入一个可迭代对象,它会遍历这个对象的所有元素,把它们逐个加入新集合。
至于set((amount))报错,是因为(amount)在这里不是元组——Python里单个元素的元组必须写成(amount,),少了逗号的话,(5)就只是整数5本身,而int不是可迭代对象,所以触发类型错误。如果写成set((amount,)),就和set([amount])效果一致了。
2. .add()方法是否做了同样的处理?
完全不一样。set.add()方法的作用是直接添加单个元素到集合中,它不需要传入可迭代对象,只需要传入你要添加的那个元素就行。比如seen.add(5)就是把整数5直接放进集合,不存在“把对象转为可迭代”的操作,和set()构造函数的遍历逻辑完全不同。
3. 两种添加元素的方式哪种更优?
分场景判断:
- 如果只是要初始化一个包含单个元素的集合,用
set([amount])或者更简洁的{amount}(注意:空集合必须用set(),不能用{},因为{}是创建空字典)更简洁,一行就能完成。 - 如果后续还要陆续添加多个元素,先创建空集合
seen = set(),再逐个调用add会更灵活,代码逻辑也更清晰。
从性能上来说,这两种方式的差异微乎其微,日常开发几乎可以忽略,重点还是看代码的可读性和适配的场景。
内容的提问来源于stack exchange,提问作者yungarlos
相关产品推荐
相关产品推荐

