By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
464,761 Members | 1,009 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 464,761 IT Pros & Developers. It's quick & easy.

Iterating Through List or Tuple

P: n/a
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:
>>i = iter(daysOfWeek)
day = i.next()
print day
sunday

If I want to find out the day of the week 2 days from now, then this
code works ok:
>>for x in xrange(2): day = i.next()
>>print day
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:
>>for x in xrange(11): day = i.next()

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
Jul 22 '08 #1
Share this Question
Share on Google+
4 Replies

P: n/a
Samir wrote:
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>

Jul 22 '08 #2

P: n/a
On Tue, 22 Jul 2008 14:43:10 -0700, Samir wrote:
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:
>>>i = iter(daysOfWeek)
day = i.next()
print day
sunday

If I want to find out the day of the week 2 days from now, then this
code works ok:
>>>for x in xrange(2): day = i.next()
>>>print day
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:
>>>for x in xrange(11): day = i.next()


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
Jul 22 '08 #3

P: n/a
Samir wrote:
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:
>>>i = iter(daysOfWeek)
day = i.next()
print day
sunday

If I want to find out the day of the week 2 days from now, then this
code works ok:
>>>for x in xrange(2): day = i.next()
>>>print day
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:
>>>for x in xrange(11): day = i.next()


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
>>import itertools
i = itertools.cycle(daysOfWeek)
i.next()
'sunday'
>>i.next()
'monday'
..
..
..
>>i.next()
'saturday'
>>i.next()
'sunday'

-Larry
Jul 22 '08 #4

P: n/a
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

Jul 22 '08 #5

This discussion thread is closed

Replies have been disabled for this discussion.