Python:基于先前值的列表理解?

时间:2016-06-13 12:57:28

标签: python list-comprehension

我想创建一个列表使用列表理解,如:

l = [100., 50., 25., 12.5, ..., a_n]

...即,从一些数字开始并生成n"一半"从同一个清单中的那个。我可能要么缺少一些直截了当的pythonic方式,要么我只需要依靠一个好的ol' for循环。可以这样做吗?感谢。

4 个答案:

答案 0 :(得分:4)

定义一个生成器,并在列表解析中使用它:

def halve(n):
    while n >= 1:
        yield n
        n /= 2

print([_ for _ in halve(100)])
>> [100, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625]

或者只是将其转换为列表:

print(list(halve(100)))
>> [100, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625]

编辑如果@R Nar的评论是正确的:

def halve(start, n):
    for _ in range(n):
        yield start
        start /= 2

print(list(halve(100, 3)))
>> [100, 50.0, 25.0]

print(list(halve(100, 4)))
>> [100, 50.0, 25.0, 12.5]

答案 1 :(得分:4)

这个怎么样?

start = 2500.0
n = 50
halves = [start / 2.0**i for i in range(n)]

等于:

[start * 2.0**(-i) for i in range(n)]
与@ DeepSpace的回答相比,效率可能更低,但是单线

答案 2 :(得分:1)

尝试一下(Python 3.8.5):

from itertools import accumulate 

n=5
result = list(accumulate(range(n), lambda acc, val: acc/2, initial=100))
print(result)

答案 3 :(得分:0)

以下代码适用于int但不适用于浮点数。

[100>>i for i in range(10)]

返回:

[100, 50, 25, 12, 6, 3, 1, 0, 0, 0]