了一組工作時,一個常見的模式是:是否有'dict.setdefault'等價於集合?
number_list = [1,5,7,2,4,4,1,3,8,5]
number_set = set()
for number in number_list:
#we only want to process the number if we haven't already processed it
if(number not in number_set):
number_set.add(number)
#do processing of 'number' here now that we know it's not a duplicate
線條if(number not in number_set):
和number_set.add(number)
來煩我,因爲我們在這裏做兩個哈希查找,當現實,我們應該只需要一個。
字典有「setdefault」操作,它解決了一個非常類似的問題:「如果鍵存在於字典中,則返回值,否則插入此默認值,然後返回默認值」。如果你這樣做天真,IE下面,執行兩個哈希查找,但setdefault讓你做一個
if item_key in dict:
dict[item_key].append(item_value)
else:
dict[item_key] = [item_value]
是否有套等效操作?像if(number_set.check_if_contains_and_then_add(number)):
,但給了一個更好的名字。
爲什麼你不能只是'number_set = set(number_list)'? –
@AshishNitinPatil在我給出的例子中是正確的選擇,但是如果你在開始之前不知道列表的全部內容,或者如果你有一個你不想消費的iderator全部一起 – Elliott
由於某些東西不能在一個集合中多次出現,只需無條件地添加它,如果它已經存在,則不會有任何變化,也不會造成任何損害。 – martineau