使用python的for语句时如何跳转一些步骤

问题描述 投票:0回答:6

我昨天面试,当我写python代码实现一些算法时,我有一个问题。一些逻辑可以使用 C:

来实现
void get_some_num(int a[], int length) {       
   int i;
   for(i = 0; i < length - 1; ++i) {
       if(something) i++; // jump a num in the array
       a[i] = 1;
   }
    return some_num;
 }

C语言在for循环中使用

i += n
语句迭代数组时可以跳转一些元素(比如n),但我发现优雅地使用python的for语句很难实现。

我该怎么做?

python for-loop
6个回答
12
投票

如果您想以类似于

C
的方式执行此操作,则只需使用
while
循环(毕竟任何
for
循环实际上只是
while
循环的特化):

i = 0
end = 10

while i < end:
    # NOTE: do something with i here

    if i == 5:
        i += 3
    i += 1

或者您可以显式创建并向前移动迭代器(我发现它的可读性较差):

it = iter(range(0, 10))

for i in it:
    if i == 5:
        for j in range(0, 3):
            i = next(it)
    print(i)

7
投票

Python还支持继续“跳过步骤”和继续循环。

在 for 循环中使用它:

for i in range(0, 10):
    if i == 5:
        continue
    # will never print 5
    print(i)

如果您希望让它在迭代中跳过一些索引,那么您可以使用 while 循环执行类似的操作:

x = range(0, 10)
i = 0
while i <= len(x):
    if i == 5:
        i += 3
        continue
    print(i)
    i += 1

输出:

0
1
2
3
4
8
9
10

2
投票

我从来没有真正需要跳过多个步骤,但是...您可以使用一个

skip
变量,每次跳过时都会递减。

skip = 0
for i, item in enumerate(my_list[:-1]):
    if skip:
        skip -= 1
        continue
    if item == my_list[i+1]:
        skip = 1   # or whatever n value you want
        continue
    # Other code

1
投票

如果你想进行多次跳转,请使用 mod 运算符 %

每2跳一次

for i in range(1, 10):
if i%2 == 0:
    print(i)

2 4 6 8

每3跳一次

for i in range(1, 10):
    if i%3 == 0:
        print(i)

3 6 9

诸如此类。


0
投票

你必须使用

continue

for item in loop:
    if item == 'wrong':
        continue

0
投票

Python 的

range()
函数允许三个参数 -
start
stop
step

您可以通过将

step
的值更改为 1 以外的值来“跳过一些步骤”。默认情况下,当没有传递任何内容时,它是 1。

根据docs,它是这样的:

class range(stop)
class range(start, stop, step=1)

它会像这样工作:

>>> for i in range(5): # starts from 0, by default, with step=1
...     print(i)
...
0
1
2
3
4
>>> for i in range(1, 5): # unless you give it a specific start
...     print(i)
...
1
2
3
4
>>> for i in range(0, 500, 100): # here, step=100
...     print(i)
...
0
100
200
300
400
>>> for i in range(500, 100): # but, passing step, requires start
...     print(i)
...
>>>
© www.soinside.com 2019 - 2024. All rights reserved.