Help, replacing the actual value from a data strucutre in a iterator
Jim Jinkins
j-jinkins at usa.net
Sat Jan 4 12:43:42 EST 2003
george hart wrote:
>Hello,
>
>My problem is that I have a very complex data structure I need to
>iterate over and change certain values to. I wrote a 'generator' to
>iterate over my data structure but when i call the next() method in
>the generator object I am returned a value that cannot be used to
>modifiy the original data structure.
>
>Here is a simplified version of my problem:
>
>a=[0,1,2,[20,30,40],9,3]
>def generator(l):
> for i in l:
> if type(i) is list:
> for q in generator(i):
> yield q
> else:
> yield i
>
>g=generator(a)
>o=g.next()
>o=100 # where i want this assignment to change a[0] to 100
>print a[0] #thus a[0] would then print out 100
>
>
>Thanks for any help,
>George.
>
>
from __future__ import generators
a=[0,1,2,[20,30,40],9,3]
def generator(l):
for i in range(len(l)):
if type(l[i]) is list:
for q in generator(l[i]):
yield q
else:
yield l, i
g = generator(a)
for x in g:
print "x=%s" % str(x)
g = generator(a)
o, i = g.next()
print "o=%s i=%s" % (str(o), i)
o[i] = 100
print "Now o[0]=%s" % o[0]
If the object structure to be traversed is more complex than list within
list, then return a mutable object. The generator will become more
complex too.
from __future__ import generators
a=[0,1,2,[20,30,40],9,3]
class RefList:
def __init__(self, l, i):
self.l = l
self.i = i
def get(self):
return self.l[self.i]
def set(self, x):
self.l[self.i] = x
def generator(l):
for i in range(len(l)):
if type(l[i]) is list:
for q in generator(l[i]):
yield q
else:
yield RefList(l, i)
g = generator(a)
ref = g.next()
print "ref.val=%s" % ref.get()
ref.set(100)
print "now ref.val=%s" % ref.get()
Jim Jinkins
More information about the Python-list
mailing list