Python:基于上一个值的列表理解?
假设我想使用列表理解创建一个列表,如:Python:基于上一个值的列表理解?,python,list-comprehension,Python,List Comprehension,假设我想使用列表理解创建一个列表,如: …即,从某个数字开始,并根据同一列表中的数字生成n个“一半”。我可能会错过一些简单的python方法,或者我将不得不依赖一个好的ol'for循环。这能做到吗?谢谢。定义一个生成器,并在列表中使用它: def halve(n): while n >= 1: yield n n /= 2 print([_ for _ in halve(100)]) >> [100, 50.0, 25.0, 12.5,
…即,从某个数字开始,并根据同一列表中的数字生成n个“一半”。我可能会错过一些简单的python方法,或者我将不得不依赖一个好的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]
或者简单地将其转换为列表:
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]
下面的代码可以使用int,但不能使用float
[100>>i for i in range(10)]
这将返回:
[100, 50, 25, 12, 6, 3, 1, 0, 0, 0]
这个怎么样
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的答案相比,效率可能要低一些,但是一行程序可以尝试一下(Python 3.8.5):
我想可以使用列表comp来实现这一点,但它似乎是一个很好的生成器用例。这是一个很好的位级黑客:)@Finwood,如果它能工作,它会完全满足OP的要求。好吧,让我们称之为粗略估计。但是我喜欢这种方法:-)是的,如果它起作用的话会很好:)但是为什么要投反对票呢?它工作得很好,直到最低的列表整数,我认为OP的意思是
n
一半的数目,所以如果n=100
,它应该返回一个100个数字的列表。我认为OP想要生成一个n
长度列表。好的,我添加了一个长度变量
[start * 2.0**(-i) for i in range(n)]
from itertools import accumulate
n=5
result = list(accumulate(range(n), lambda acc, val: acc/2, initial=100))
print(result)