我昨天面试,当我写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语句很难实现。
我该怎么做?
如果您想以类似于
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)
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
我从来没有真正需要跳过多个步骤,但是...您可以使用一个
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
如果你想进行多次跳转,请使用 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
诸如此类。
你必须使用
continue
for item in loop:
if item == 'wrong':
continue
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)
...
>>>