2013-12-21 41 views
0

我一直在使用集相當多。Python設置使用,返回聯合,折衷類型的折衷

>>> 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

可以使用set.update用於就地更新它返回一個工會

從文檔

更新設置的報價,加上從其他所有元素。

>>> s1 = set('a') 
>>> s1.update('ba') 
>>> s1 
set(['a', 'b']) 
相關問題