Python设置用法,返回一个联合,权衡类型灵活性

时间:2013-12-21 06:23:52

标签: python types set

我一直在使用套装。

>>> 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,但第二个将给予更大的灵活性。我的问题:

我是否通过确保我总是将此功能传递给一套来获得任何收益?

能够通过任何迭代的灵活性值得吗?

2 个答案:

答案 0 :(得分:2)

想要能够传递任意迭代吗?你传递除了集合以外的任何东西吗?以你的方式回答你的问题很难。确保它是一套的优点是,如果不是,你会得到一个响亮的警告。灵活性是否“值得”取决于你对其他事情做了什么。如果你要合并的东西是你需要自己操作的集合,那么也可以将它们留作集合。如果它们总是成为列表和/或元组,因为你在其他上下文中使用它们作为列表/元组,那么接受任何迭代都可能是有意义的。

答案 1 :(得分:0)

您可以使用set.update进行返回联合的就地更新

从文档引用

  

更新集合,添加其他所有元素。

实施例

>>> s1 = set('a')
>>> s1.update('ba')
>>> s1
set(['a', 'b'])