2017-12-03 9 views
0

5つの要素ごとに要素を半分に減らすようなリストの要素を崩壊したいと思います。例えば、長さ10を持つもののリストになるだろう:pythonは変化する方法でリスト要素を掛けます

[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] 

私はリスト内包とループのための基本的なを試してみましたが、私はその背後のロジックをconstrucことができませんでした。

答えて

4

これはあなたの探しているものですか?

>>> 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] 
>>> 
+0

おかげで多く、それが* 2、V 'で働いた**( - (I // 5))'、(I // 5) 'V/2 **に変更する'それは – kneazle

0

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] 
+0

を増やす作らこれはPython 2では動作しないようです – Manjunath

0

他のすべての回答は素晴らしいですが、私はこのための拡張ソリューションを追加したいと思います。

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] 
関連する問題