使用集合时的常见模式如下:
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”操作,解决了一个非常类似的问题:“如果字典中存在key,则返回值,否则插入这个默认值,然后返回默认值”。如果您天真地执行此操作,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)):
但给了一个更好的名字。