了一组工作时,一个常见的模式是:是否有'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