我一直在使用套装。
>>> s1
set(['a', 'b'])
使用方法允许类型转换,而重载运算符则不允许。
>>> s1.issubset('abc')
True
>>> s1 <= 'abc'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only compare to a set
>>> s1 <= set('abc')
True
我希望能够将具有联合的集合联合到函数中的另一个集合:
>>> s1 | set('bc') # returns the union without modifying either
set(['a', 'c', 'b'])
>>> s1.union('bc') # allows for type conversion.
set(['a', 'c', 'b'])
对于执行此操作的函数来说,似乎我最好的选择是:
def add_elements_strict(collector_set):
do_stuff()
return collector_set | more_elements()
或者像这样。
def add_elements_from_any_iterable(collector_set):
do_stuff()
return collector_set.union(more_elements())
哪个会是更好的选择?显然,如果除了一组之外的任何东西,第一个将给出TypeError
,但第二个将给予更大的灵活性。我的问题:
我是否通过确保我总是将此功能传递给一套来获得任何收益?
能够通过任何迭代的灵活性值得吗?
答案 0 :(得分:2)
你想要能够传递任意迭代吗?你去传递除了集合以外的任何东西吗?以你的方式回答你的问题很难。确保它是一套的优点是,如果不是,你会得到一个响亮的警告。灵活性是否“值得”取决于你对其他事情做了什么。如果你要合并的东西是你需要自己操作的集合,那么也可以将它们留作集合。如果它们总是成为列表和/或元组,因为你在其他上下文中使用它们作为列表/元组,那么接受任何迭代都可能是有意义的。
答案 1 :(得分:0)
您可以使用set.update进行返回联合的就地更新
从文档引用
更新集合,添加其他所有元素。
实施例
>>> s1 = set('a')
>>> s1.update('ba')
>>> s1
set(['a', 'b'])