But while the Zen of Python limits on the number of obvious ways, the Zen of Python says nothing about the boundless freedom of unobvious ways.
Let's empty a list named bucket.
The most obvious way is to simply not. 99 times out of 100, you want to assign a new empty list rather than mutating the old.
bucket = []But let's say you really wanted to empty it, well the clearest way is clear:
bucket.clear()But even the docs say this is equivalent to:
del bucket[:]I guess that's crossing the obvious line. Of course, it may be more obvious than Norvig's "dumbell" operator:
bucket[:]=[]Actually the slice assignment can take any iterable, so our list can lift plates of many shapes:
bucket[:]={}If you don't want your list getting ripped and/or cut, maybe keep it warm with Norvig's ski hat:
bucket *=0The ski hat is of particular interest because it's using a very obvious list feature, much more commonly used than list.clear(). Nobody would bat an eye at:
bucket = [0, 1, 2, 3] * 2If you multiply any list by 0, you make a new list of length 0. Bizarrely, this is actually true of any multiplier less than 0, too.
# bucket = [0, 1, 2, 3, 0, 1, 2, 3]
bucket *= -3Safe to say we are deep in the territory of the unobvious. Is there a syntax we might meditate on to take us further?
# bucket = []