I am trying to figure this problem out but I can't seem to get the code right. Please help.

OUESTION:

Implement a subclass of list called myList. It will behave just like the list class except for iteration:

Usage:
>>> l = myList([3,5,7,9])
>>> for item in l:
print(item)

3
8
15
24

Explanation: the iteration is actually over all the partial sums of list l:

* 3,
* 3+5,
* 3+5+7, and
* 3+5+7+9.

MY CODE:

``````class myList(list):
def __iter__(self):
return ListIterator(self)

class ListIterator(object):
def __init__(self, lst):
self.lst = lst
self.index = 0
if self.index >= len(self.lst):
raise StopIteration
res = self.lst[self.index]
self.index += 2
return res``````
2
Contributors
1
2
Views
7 Years
Discussion Span
Last Post by griswolf

I'll give you two hints:

1. You need a constructor. Use this:
``````class myList(list):
def __init__(self,*args):
super(myList,self).__init__(args)``````
2. Your __iter__ method can use a similar technique, but beware infinite recursion if you try to iterate over myList in that method. I used the `yield` keyword in my implementation

I created a solution in 8 ilnes (I showed you 3 of them). Then I exercised it as follows:

``````l = myList(1)
l.append(3)
l.extend([5,7,9])
print l

for p in l:
print p
print l # prove I didn't change the list
"""output:
[1, 3, 5, 7, 9]
1
4
9
16
25
[1, 3, 5, 7, 9]
"""``````

By the way: The mathemaniac loves that the sum from 1 of all the odd numbers is always a square.

Edited by griswolf: n/a

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.