kneazle
kneazle

Reputation: 335

python multiply list elements in a changing manner

I want to decay elements of a list such that on every 5 element, the elements will be reduced by half. For example, a list of ones with length 10 will become:

[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

[1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0.25,0.25,0.25,0.25,0.25]

I tried list comprehensions and a basic for loop, but I couldn't construc the logic behind it.

Upvotes: 0

Views: 100

Answers (3)

Manjunath
Manjunath

Reputation: 150

All other answers are great, i would like to add a stretched solution for this.

start_range = 0
end_range = 5
num = 1

x = [1 for _ in range(10)]
res = []
while start_range <= len(x):
    for item in x[start_range:end_range]:
        res.append(item*num)
    start_range = end_range
    end_range = start_range + 5
    num /= float(2)

print res

# output: [1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5]

Upvotes: 0

dkato
dkato

Reputation: 895

Think simple.

value = 1
result = []

for i in range(3):
    for j in range(5):
        result.append(value)
    else:
        value /= 2

print(result)
# [1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.25]

Upvotes: 0

Tom Karzes
Tom Karzes

Reputation: 24052

Is this what you're looking for?

>>> x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> r = [v*2**(-(i//5)) for i, v in enumerate(x)]
>>> r
[1, 1, 1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0.25, 0.25, 0.25, 0.25, 0.25]
>>> 

Upvotes: 4

Related Questions