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ことができませんでした。
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ことができませんでした。
これはあなたの探しているものですか?
>>> 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]
>>>
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]
を増やす作らこれはPython 2では動作しないようです – Manjunath
他のすべての回答は素晴らしいですが、私はこのための拡張ソリューションを追加したいと思います。
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]
おかげで多く、それが* 2、V 'で働いた**( - (I // 5))'、(I // 5) 'V/2 **に変更する'それは – kneazle