Am 08.03.2010 23:34, schrieb dimitri pater - serpia:
Hi,
I have two related lists:
x = [1 ,2, 8, 5, 0, 7]
y = ['a', 'a', 'b', 'c', 'c', 'c' ]
what I need is a list representing the mean value of 'a', 'b' and 'c'
while maintaining the number of items (len):
w = [1.5, 1.5, 8, 4, 4, 4]
This kinda looks like you used the wrong data structure.
Maybe you should have used a dict, like:
{'a': [1, 2], 'c': [5, 0, 7], 'b': [8]} ?
I have looked at iter(tools) and next(), but that did not help me. I'm
a bit stuck here, so your help is appreciated!
As said, I'd have used a dict in the first place, so lets transform this
straight forward into one:
x = [1 ,2, 8, 5, 0, 7]
y = ['a', 'a', 'b', 'c', 'c', 'c' ]
# initialize dict
d={}
for idx in set(y):
d[idx]=[]
#collect values
for i, idx in enumerate(y):
d[idx].append(x[i])
print("d is now a dict of lists: %s" % d)
#calculate average
for key, values in d.items():
d[key]=sum(values)/len(values)
print("d is now a dict of averages: %s" % d)
# build the final list
w = [ d[key] for key in y ]
print("w is now the list of averages, corresponding with y:\n \
\n x: %s \n y: %s \n w: %s \n" % (x, y, w))
Output is:
d is now a dict of lists: {'a': [1, 2], 'c': [5, 0, 7], 'b': [8]}
d is now a dict of averages: {'a': 1.5, 'c': 4.0, 'b': 8.0}
w is now the list of averages, corresponding with y:
x: [1, 2, 8, 5, 0, 7]
y: ['a', 'a', 'b', 'c', 'c', 'c']
w: [1.5, 1.5, 8.0, 4.0, 4.0, 4.0]
Could have used a defaultdict to avoid dict initialisation, though.
Or write a custom class:
x = [1 ,2, 8, 5, 0, 7]
y = ['a', 'a', 'b', 'c', 'c', 'c' ]
class A:
def __init__(self):
self.store={}
def add(self, key, number):
if key in self.store:
self.store[key].append(number)
else:
self.store[key] = [number]
a=A()
# collect data
for idx, val in zip(y,x):
a.add(idx, val)
# build the final list:
w = [ sum(a.store[key])/len(a.store[key]) for key in y ]
print("w is now the list of averages, corresponding with y:\n \
\n x: %s \n y: %s \n w: %s \n" % (x, y, w))
Produces same output, of course.
Note that those solutions are both not very efficient, but who cares ;)
thanks!
No Problem,
Michael
--
http://mail.python.org/mailman/listinfo/python-list