2016-07-15 21 views
2

Python for for循环接受for循环范围内的三个参数。我怎么能操纵第三个参数成为一个因素?如何操作范围函数的第三个参数来增加n的因子?

factor_of = 2 
li = [] 
for i in range(first_value, 25000, factor_of): 
    li.append(i) 

现在我明白,这每一次将上升2,但我将如何使其其中第一个值将被由factor_of每次相乘,并存储在i价值?

期望的影响将是(假设first_value设置为10

[10, 20, 40, 80, 160, ...] 

是的,我知道这更有意义在while循环。

回答

1

我会用一个while环路由@Delgan的建议。不过,如果你还是喜欢采用for环路,这里是我想出了*解决方案:

​​

my_func返回所需的列表。列表解析的i个元素被计算为first*factor**i,其中索引i变化从0n - 1,作为n的最小整数数值,其满足:

first * factor**n >= last 

演示:

In [331]: my_func(10, 2500, 2) 
Out[331]: [10, 20, 40, 80, 160, 320, 640, 1280] 

In [332]: my_func(10, 10000, 10) 
Out[332]: [10, 100, 1000, 10000] 

In [333]: my_func(2, 8000, 5) 
Out[333]: [2, 10, 50, 250, 1250, 6250] 

作为最后需要指出的是,这种方法可能会受到与浮点运算相关的舍入误差的影响。

*我假设你使用Python 3,为了让代码在Python 2个工作需要额外import句子,以避免整数除法错误:from __future__ import division

5

使用内置的range()不能做这样的事情。但是,您可以定义自己的generator,像这样:

def range_factor(start, stop, factor_of): 
    while start < stop: 
     yield start 
     start *= factor_of 

li = list(range_factor(10, 25000, 2)) 
# [10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480] 
0
factor_of = 2 
for i in range(1,15): 
    print(10 * factor_of**i) 

或:

[ 10*factor_of**i for i in range(1,15) ] 
相关问题