I was looking through some Python code a few days ago, and noticed that its author was using this:
if something in dict.keys(): dict[something] += 1
if something in dict: dict[something] += 1
It seems like a small difference, but it's actually a very important one. The second form checks to see whether
something is a key in the dictionary
dict. The first form, on the other hand, creates a list of all the keys in the dictionary, then searches that list from start to finish to see if
something is there. They both produce the right answer, but the fast form does it in constant time, while the slow form (the one with the call to
dict.keys()) takes time proportional to the size of the dictionary. The really bad news is, the "error" is silent.
What other examples have you seen of people getting the right answer the wrong way? And what more could we do to teach people how to avoid these traps? Does it have to be done case by case, or is there something larger or more general we could try to convey?
Originally posted at Software Carpentry.