python以不断变化的方式对列表元素进行乘法

python以不断变化的方式对列表元素进行乘法,python,list,list-comprehension,multiplication,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,1,0.5,0.5,0.5,0.5,0.5,0.25,0.25,0.25,0.25,0.25] 我尝试了列表理解和基本for循环,但我无法解释它背后的逻辑。这就是你要找的吗 >>> x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] >>>

我想衰减列表中的元素,这样每5个元素,元素就会减少一半。例如,长度为10的列表将变为:

[1,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循环,但我无法解释它背后的逻辑。

这就是你要找的吗

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

这就是你要找的吗

>>> 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]
>>> 
简单想想

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]
简单想想

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]

所有其他答案都很好,我想为此添加一个扩展解决方案

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]
start\u范围=0
结束_范围=5
num=1
x=[1表示范围(10)]
res=[]

虽然所有其他答案都很好,但我想为此添加一个扩展解决方案

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]
start\u范围=0
结束_范围=5
num=1
x=[1表示范围(10)]
res=[]

虽然start_范围非常感谢,但它与
v*2**(-(i//5))
一起工作,将其更改为
v/2**(i//5)
使其增加感谢,它与
v*2**(-(i//5))
一起工作,将其更改为
v/2**(i//5)
使其增加