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

gus*_*rom 5 python list-comprehension

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

l = [100., 50., 25., 12.5, ..., a_n]
Run Code Online (Sandbox Code Playgroud)

...即,从某个数字开始,然后从同一列表中的那个数字生成 n 个“一半”。我可能会遗漏一些简单的 Pythonic 方法,或者我只需要依靠一个好的 ol' for 循环。这能做到吗?谢谢。

Dee*_*ace 5

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

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]
Run Code Online (Sandbox Code Playgroud)

或者简单地将其转换为列表:

print(list(halve(100)))
>> [100, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625]
Run Code Online (Sandbox Code Playgroud)

编辑如果@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]
Run Code Online (Sandbox Code Playgroud)


Dom*_*Cat 5

这个怎么样?

start = 2500.0
n = 50
halves = [start / 2.0**i for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

等于:

[start * 2.0**(-i) for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

与@DeepSpace 的答案相比,效率可能较低,但只有一行

  • 我认为 OP 想要生成一个 `n` 长度的列表。 (2认同)
  • 好的,我添加了一个长度变量 (2认同)