nesting for statements?

Peter Otten __peter__ at
Tue Nov 29 09:05:27 CET 2005

tpcolson at wrote:

> Hi. Thanks for the tip. However, implementing that example, the script
> will only generate the second output "file", (or it's overwriting the
> first one), so all I get when run is "fileb".

I think your looping code has the structure

for x in ["a", "b", "c"]:
print x 

This will print x once after the loop has completed. By then the value of x
is "c". To fix it, move the code from /after/ the loop /into/ the loop:

for x in ["a", "b", "c"]:
    print x

In the code you give that would mean that you have to indent the

    # ...
    # ...

statement one more level.

Inside that loop you want a filename and an integer value in lockstep. The
simplest way to get that is zip():

>>> for Disc, suffix in zip(xrange(2, 6, 2), "abcdefghijklmnopqrstuvwxyz"):
...     Out_Dem = "out" + suffix
...     print Disc, Out_Dem
2 outa
4 outb

Again, you have to replace the print statement by your try...except. If you
fear that you will eventually run out of suffices, here is a function that
"never" does:

>>> def gen_suffix(chars):
...     for c in chars:
...             yield c
...     for c in gen_suffix(chars):
...             for d in chars:
...                     yield c + d
>>> for i, s in zip(range(20), gen_suffix("abc")):
...     print i, s
0 a
1 b
2 c
3 aa
4 ab
5 ac
6 ba
7 bb
8 bc
9 ca
10 cb
11 cc
12 aaa
13 aab
14 aac
15 aba
16 abb
17 abc
18 aca
19 acb

That said, reading the tutorial or an introductory book on Python never


More information about the Python-list mailing list