1.1 (Rarely) Generate a List for Iteration1.2 Use enumerate() Instead of Looping Over an Index1.3 Don’t Iterate Over dict.keys() When You Want dict.items()1.4 Mutating an Object During Iteration1.5 for Loops Are More Idiomatic Than while Loops1.6 The Walrus Operator for “Loop-and-a-Half” Blocks1.7 zip() Simplifies Using Multiple Iterables1.8 zip(strict=True) and itertools.zip_longest()1.9 Wrapping Up