2012-11-16 49 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循環解決方案。