20

如何从内部循环中增加外部迭代器?

更准确地说:

  for i in range(0,6):
    print i
    for j in range(0,5):
      i = i+2

我正进入(状态

0
1
2
3
4
5

, 但我想要0,2,4

以上是我想要实现的简单想法。

这是我的Java代码:

str1="ababa"
str2="aba"
for(int i =0; i < str1.length; i++)
  for(int j =0; j < str2.length; j++)
       if str1[i+j]!=str[j]
           break;
       if( j ==str2.length -1)
           i=i+str2.length;
4

5 回答 5

21

看来您想使用范围函数的 step 参数。从文档:

range(start, stop[, step]) 这是一个通用函数,用于创建包含算术级数的列表。它最常用于 for 循环。参数必须是纯整数。如果省略 step 参数,则默认为 1。如果省略 start 参数,则默认为 0。完整形式返回纯整数列表 [start, start + step, start + 2 * step, ...] . 如果step为正,则最后一个元素是最大的start + i * step小于stop;如果 step 为负数,则最后一个元素是最小的 start + i * step 大于 stop。step 不能为零(否则会引发 ValueError)。例子:

 >>> 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]
 >>> range(0, -10, -1) [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
 >>> range(0) []
 >>> range(1, 0) []

在您获得 [0,2,4] 的情况下,您可以使用:

range(0,6,2)

或者在你的情况下什么时候是一个var:

idx = None
for i in range(len(str1)):
    if idx and i < idx:
        continue
    for j in range(len(str2)):
        if str1[i+j] != str2[j]:
            break
    else:
        idx = i+j
于 2012-11-16T04:43:15.363 回答
10

你可能会更好地使用 while 循环而不是 for 循环。我直接从java代码翻译了你的代码。

str1 = "ababa"
str2 = "aba"
i = 0

while i < len(str1):
  j = 0
  while j < len(str2):
    if not str1[i+j] == str1[j]:
      break
    if j == (len(str2) -1):
      i += len(str2)
    j+=1  
  i+=1
于 2012-11-16T05:11:20.253 回答
6

在 python 中,for 循环遍历可迭代对象,而不是递增计数器,因此您有几个选择。使用 Artsiom 推荐的跳过标志是一种方法。另一种选择是从您的范围内制作一个生成器,并通过使用 丢弃一个元素来手动推进它next()

iGen = (i for i in range(0, 6))
for i in iGen:
    print i
    if not i % 2:
        iGen.next()

但这并不完全,因为next()如果它到达范围的末尾可能会抛出一个 StopIteration,所以你必须添加一些逻辑来检测它并在发生这种情况时跳出外循环。

最后,我可能会使用 aw4ully 的 while 循环解决方案。

于 2012-11-16T05:16:02.507 回答
3

我阅读了上述所有答案,这些答案实际上都很好。

看看这段代码:

for i in range(1, 4):
    print("Before change:", i)
    i = 20 # changing i variable
    print("After change:", i) # this line will always print 20

当我们执行上面的代码时,输​​出如下所示,

Before Change: 1
After change: 20
Before Change: 2
After change: 20
Before Change: 3
After change: 20

在 python for 循环中并不是试图增加i价值。for 循环只是分配i我们给的值。使用range(4)我们正在做的事情是我们将值赋给需要分配给 i 的 for 循环。

你可以使用while loop而不是for loop做你想做的事情,

i = 0
while i < 6:
    print(i)
    j = 0
    while j < 5:
        i += 2 # to increase `i` by 2

这会给,

0
2
4

谢谢 !

于 2019-10-12T04:55:37.213 回答
0
for a in range(1):

    for b in range(3):
        a = b*2
        print(a)

根据您的问题,您想在内部循环的帮助下迭代外部循环。

  1. 在外循环中,我们将内循环迭代 1 次。
  2. 在内部循环中,我们从 0 开始迭代 2 的倍数的 3 个数字。

    Output:
    0
    2
    4
    
于 2019-10-12T04:22:43.647 回答