Pythonic infinite for loop?

Chris Angelico rosuav at gmail.com
Thu Apr 14 22:10:52 EDT 2011


Apologies for interrupting the vital off-topic discussion, but I have
a real Python question to ask.

I'm doing something that needs to scan a dictionary for elements that
have a particular beginning and a numeric tail, and turn them into a
single list with some processing. I have a function parse_kwdlist()
which takes a string (the dictionary's value) and returns the content
I want out of it, so I'm wondering what the most efficient and
Pythonic way to do this is.

My first draft looks something like this. The input dictionary is
called dct, the output list is lst.

lst=[]
for i in xrange(1,10000000): # arbitrary top, don't like this
  try:
    lst.append(parse_kwdlist(dct["Keyword%d"%i]))
  except KeyError:
    break

I'm wondering two things. One, is there a way to make an xrange object
and leave the top off? (Sounds like I'm risking the numbers
evaporating or something.) And two, can the entire thing be turned
into a list comprehension or something? Generally any construct with a
for loop that appends to a list is begging to become a list comp, but
I can't see how to do that when the input comes from a dictionary.

In the words of Adam Savage: "Am I about to feel really, really stupid?"

Thanks in advance for help... even if it is just "hey you idiot, you
forgot about X"!

Chris Angelico



More information about the Python-list mailing list