Start here. This is the direct spoken answer to practice first.
Overview
Many Python APIs accept an iterable, while bugs often arise because the supplied value is a one-shot iterator.
An iterable is an object that can produce an iterator, normally through iter(value). A list is iterable and each iteration can obtain a new iterator. An iterator represents the current traversal state: it returns itself from iter and yields the next value from next until it raises StopIteration. Iterators are usually one-pass; after exhaustion, iterating them again produces no values unless a new iterator is created from the original source.