python以不断变化的方式多次列出元素

时间:2017-12-03 10:30:03

标签: python list list-comprehension multiplication

我想衰减列表中的元素,以便在每5个元素上,元素将减少一半。例如,长度为10的列表将成为:

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

我尝试了列表推导和基本的for循环,但我无法构建它背后的逻辑。

3 个答案:

答案 0 :(得分: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]
>>> 

答案 1 :(得分:0)

想想简单。

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]

答案 2 :(得分: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]