gus*_*rom 5 python list-comprehension
假设我想使用列表理解创建一个列表,例如:
l = [100., 50., 25., 12.5, ..., a_n]
Run Code Online (Sandbox Code Playgroud)
...即,从某个数字开始,然后从同一列表中的那个数字生成 n 个“一半”。我可能会遗漏一些简单的 Pythonic 方法,或者我只需要依靠一个好的 ol' for 循环。这能做到吗?谢谢。
定义一个生成器,并在列表理解中使用它:
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)
这个怎么样?
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 的答案相比,效率可能较低,但只有一行