Jhon Watson
Jhon Watson

Reputation: 47

To print the lists for the code?

sub = [767220, 769287, 770167, 770276, 770791, 770835, 771926, 1196500, 1199789,1201485, 1206331, 1206467, 1210929, 1213184, 1213204, 1213221, 1361867, 1361921, 1361949, 1364886, 1367224, 1368005, 1368456, 1368982, 1369000, 1370365, 1370434, 1370551, 1371492, 1471407, 1709408, 1710264, 1710308, 1710322, 1710350, 1710365, 1710375]

def runningMean(seq, n=0, total=0): #function called recursively
    if not seq:
        return []
    total = total + int(seq[-1])
    if int(seq[-1]) < total/float(n+1) * 0.9:  # Check your condition to see if it's time to stop averaging.
        return []
    return runningMean(seq[:-1], n=n+1, total=total) + [total/float(n+1)]

avg = runningMean(sub, n = 0, total = 0)
print avg #it prints the avg value which satisfies the above condition

The result obtain is:

[1710198.857142857, 1710330.6666666667, 1710344.0, 1710353.0, 1710363.3333333333, 1710370.0, 1710375.0]

but now I need to print both the average & sub list which satisfies the condition(the items in list sub that are greater than the items in avg so it prints avg now I need it to print the items in seq also)

i.e.

[1710198.857142857, 1710330.6666666667, 1710344.0, 1710353.0, 1710363.3333333333, 1710370.0, 1710375.0]
[1709408, 1710264, 1710308, 1710322, 1710350, 1710365, 1710375]

How I can change the code which will provide me such a result in Python?

Upvotes: 0

Views: 112

Answers (2)

user2110286
user2110286

Reputation:

Try this:

sub = [767220, 769287, 770167, 770276, 770791, 770835, 771926, 1196500, 1199789,1201485, 1206331, 1206467, 1210929, 1213184, 1213204, 1213221, 1361867, 1361921, 1361949, 1364886, 1367224, 1368005, 1368456, 1368982, 1369000, 1370365, 1370434, 1370551, 1371492, 1471407, 1709408, 1710264, 1710308, 1710322, 1710350, 1710365, 1710375]
def runningMean(seq, n=0, total=0): #function called recursively
    L = [[],[]]
    if len(seq) == 0:
        return L
    total = total + int(seq[-1])
    if int(seq[-1]) < total/float(n+1) * 0.9:  # Check your condition to see if it's time to stop averaging.
        return L
    NL = runningMean(seq[:-1], n=n+1, total=total)
    L[0] += NL[0] + [total/float(n+1)]
    L[1] += [seq[-1]] + NL[1]
    return L

avg = runningMean(sub, 0, 0)
print(avg[0])
print(avg[1])

Output:

[1710198.857142857, 1710330.6666666667, 1710344.0, 1710353.0, 1710363.3333333333, 1710370.0, 1710375.0]
[1710375, 1710365, 1710350, 1710322, 1710308, 1710264, 1709408]

Upvotes: 1

Francisco Puga
Francisco Puga

Reputation: 25158

Python can return multiple values from a method. You can use this to return on each call the elements that you are interested in.

Upvotes: 0

Related Questions