对于在python中使用自定义步骤的循环

gen*_*gen 18 python for-loop

我可以在python中使用简单的for循环:

for i in range(10):
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何制作更复杂的内容,这在c ++中非常简单.

你如何在python中实现这样的for循环:

for(w = n; w > 1; w = w / 2)
Run Code Online (Sandbox Code Playgroud)

我到目前为止最接近的是:

for w in reversed(range(len(list)))
Run Code Online (Sandbox Code Playgroud)

小智 36

for i in range(0, 10, 2):
    print(i)

>>> 0
>>> 2
>>> 4
>>> 6
>>> 8
Run Code Online (Sandbox Code Playgroud)

http://docs.python.org/2/library/functions.html

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)
[0, 3, 6, 9]
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 12

首先:Python for循环与C for循环并不是一回事.它们代表For Each循环.迭代迭代的元素.range()生成一个可迭代的整数序列,让您模拟最常见的C for循环用例.

然而,大多数的时候你希望使用range().你会遍历列表本身:

for elem in reversed(some_list):
    # elem is a list value
Run Code Online (Sandbox Code Playgroud)

如果必须有索引,通常用于enumerate()将其添加到循环中:

for i, elem in reversed(enumerate(some_list)):
    # elem is a list value, i is it's index in the list
Run Code Online (Sandbox Code Playgroud)

对于真正"时髦"的循环,使用while或创建自己的生成器函数:

def halved_loop(n):
    while n > 1:
        yield n
        n //= 2

for i in halved_loop(10):
    print i
Run Code Online (Sandbox Code Playgroud)

打印10,5,2.你也可以将它扩展到序列:

def halved_loop(sequence):
    n = -1
    while True:
        try:
            yield sequence[n]
        except IndexError:
            return
        n *= 2

for elem in halved_loop(['foo', 'bar', 'baz', 'quu', 'spam', 'ham', 'monty', 'python']):
    print elem
Run Code Online (Sandbox Code Playgroud)

打印:

python
monty
spam
foo
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 5

对于您的确切示例,您可能根本不会使用 for 循环,而是使用 while 循环:

w = n
while w > 1:
    do stuff
    w = w / 2
Run Code Online (Sandbox Code Playgroud)