Iterating Through List or Tuple

S

Samir

Is there a way to loop or iterate through a list/tuple in such a way
that when you reach the end, you start over at the beginning? For
example, suppose I define a list "daysOfWeek" such that:
daysOfWeek = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']

If today is Sunday, I can set the variable "day" to today by:
sunday

If I want to find out the day of the week 2 days from now, then this
code works ok:
tuesday

However, when extending my range beyond the number of items in the
list, I receive an error. For example, if I want to find out the day
of the week 11 days from today, I get this:


Traceback (most recent call last):
File "<pyshell#87>", line 1, in <module>
for x in xrange(11): day = i.next()
StopIteration

Is there a way to easily loop through a list or tuple (and starting
over at the beginning when reaching the end) without having to resort
to an "if" or "while" statement?

(My question concerns the more general use of lists and tuples, not
necessarily determining days of the week. I know about using "import
datetime" and "from calendar import weekday" but thought that using
the days of the week would best illustrate my problem.)

As always, thanks in advance.

Samir
 
F

Fredrik Lundh

Samir said:
Is there a way to loop or iterate through a list/tuple in such a way
that when you reach the end, you start over at the beginning? For
example, suppose I define a list "daysOfWeek" such that:
daysOfWeek = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
>>> import itertools
>>> help(itertools.cycle)
Help on class cycle in module itertools:

class cycle(__builtin__.object)
| cycle(iterable) --> cycle object
|
| Return elements from the iterable until it is exhausted.
| Then repeat the sequence indefinitely.

....
>>> L = [1, 2, 3]
>>> for i, x in enumerate(itertools.cycle(L)):
.... print i, x
.... if i >= 10:
.... break
....
0 1
1 2
2 3
3 1
4 2
5 3
6 1
7 2
8 3
9 1
10 2
</F>
 
M

Marc 'BlackJack' Rintsch

Is there a way to loop or iterate through a list/tuple in such a way
that when you reach the end, you start over at the beginning? For
example, suppose I define a list "daysOfWeek" such that:
daysOfWeek = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']

If today is Sunday, I can set the variable "day" to today by:
sunday

If I want to find out the day of the week 2 days from now, then this
code works ok:
tuesday

However, when extending my range beyond the number of items in the
list, I receive an error. For example, if I want to find out the day
of the week 11 days from today, I get this:


Traceback (most recent call last):
File "<pyshell#87>", line 1, in <module>
for x in xrange(11): day = i.next()
StopIteration

Is there a way to easily loop through a list or tuple (and starting
over at the beginning when reaching the end) without having to resort
to an "if" or "while" statement?

For sequences: days_of_week[(today + offset) % len(days_of_week)]

For iterables in general: `itertools.cycle()`

Ciao,
Marc 'BlackJack' Rintsch
 
S

Samir

Fredrik, Marc, Larry -- Thank you all for your very fast and
informative replies. I had not come across "itertools" in my search.
This group is a great resource.

Samir
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,781
Messages
2,569,616
Members
45,306
Latest member
TeddyWeath

Latest Threads

Top