There are several different blocks of code you could tack onto a loop (I've deliberately chosen somewhat unusual words to express these here):

    for x in items:
        # body
        # things to do between loop iteration
        # (executed after each iteration in the loop when there is a next value)
        # things to do after the last element of the loop is processed
        # (when the loop is not exited by break)
        # things to do if the list was empty

For example:

    result = ""
    for x in items:
        result += str(x)
        result += ", "
        result = "no data"

When I first learned that Python had an 'else' clause on loops, I assumed it meant 'contrariwise'. I was surprised that it actually meant 'subsequently'.

To be more clear, contrariwise is essentially equivalent to:

    empty = True
    for x in items:
        empty = False
        # body
    if empty:
        # do contrariwise code

and interstitially is essentially equivalent to:

    first = True
    for x2 in items:
        if not first:
            # do interstitial code
            first = False
        x = x2
        # body

I think these are common/useful paradigms. I'm curious what others think.

--- Bruce