2012-11-16 53 views
8

如何从内部循环增加外部迭代器?增量内部循环的python

为了更精确:

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

以上是simpilfied知道我要acheive。

这里是我的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; 
+0

你真的需要什么并不是很清楚 - 给我们提供真实案例,我们会回答你。在任何情况下,从你的样本不清楚为什么你需要设置我>然后9 - 我的意思是什么原因你需要增加它在最后 –

+0

我简化了我的问题 – runcode

+0

我仍然不清楚得到0,2, 4你可以使用范围(0,6,2) –

回答

12

看来你想使用范围功能的步长参数。从文档:

范围(启动,停止[步骤])这是一个通用的函数来创建包含算术级数 列表。它最常用于 循环。参数必须是纯整数。如果省略step参数为 ,则其默认值为1.如果省略start参数,则其 默认为0.完整形式返回一个普通整数列表[start, start + step,start + 2 * step,。 ..]。如果步骤是肯定的,则最后的 元素是最小的开始+ i *步骤,小于停止;如果步骤为 否定,则最后一个元素是最小的开始+ i *步骤大于 的停止。步骤不能为零(否则会引发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) 

或在您的情况下是一个变种:

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 
+0

谢谢!,种,但我的步骤参数是一个变量..不是一个固定的常量,看到我的Java版本代码.. t – runcode

+0

检查最新的样本 - 可以接受吗? –

+0

是的!哇,它不是staright forward来实现这个python ... – runcode

4

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

str1 = "ababa" 
str2 = "aba" 
i, j = 0,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++ 
4

在Python中,for循环遍历iterables,而不是递增计数器,让你有一对夫妇的选择。使用像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循环解决方案。