我想创建一个列表使用列表理解,如:
l = [100., 50., 25., 12.5, ..., a_n]
...即,从一些数字开始并生成n"一半"从同一个清单中的那个。我可能要么缺少一些直截了当的pythonic方式,要么我只需要依靠一个好的ol' for循环。可以这样做吗?感谢。
答案 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]