2012-11-16 57 views
8

Làm thế nào để tăng bộ lặp bên ngoài từ vòng lặp bên trong?python để tăng vòng lặp bên trong

Để được chính xác hơn:

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

Tôi nhận

0 
1 
2 
3 
4 
5 

, nhưng tôi muốn 0,2,4

Trên đây là ý tưởng simpilfied những gì tôi muốn đạt được.

Đây là mã Java của tôi:

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

Nó không phải là rất rõ ràng những gì bạn thực sự cần - cung cấp cho chúng tôi với trường hợp thực tế và chúng tôi sẽ trả lời bạn.Trong bất kỳ trường hợp nào từ mẫu của bạn thì không rõ lý do tại sao bạn cần đặt i> sau đó 9 - ý tôi là vì lý do nào bạn cần tăng lên ở cuối số –

+0

tôi đã đơn giản hóa câu hỏi của tôi – runcode

+0

Tôi vẫn chưa rõ ràng để có được 0,2, 4 bạn có thể sử dụng phạm vi (0,6,2) –

Trả lời

12

Dường như bạn muốn sử dụng tham số bước của chức năng tầm xa. Từ tài liệu:

phạm vi (bắt đầu, dừng [, bước]) Đây là một chức năng linh hoạt để tạo ra danh sách có chứa các phép tính số học. Nó thường được sử dụng trong các vòng . Các đối số phải là số nguyên đơn giản. Nếu đối số bước là bỏ qua, nó mặc định là 1. Nếu đối số bắt đầu bị bỏ qua, nó mặc định là 0. Biểu mẫu đầy đủ trả về danh sách các số nguyên đơn giản [bắt đầu, bắt đầu + bước, bắt đầu + 2 * bước,. ..]. Nếu bước là dương, phần tử cuối cùng là bước khởi đầu + i * lớn nhất nhỏ hơn điểm dừng; nếu bước là âm, phần tử cuối cùng là bước bắt đầu nhỏ nhất + i * lớn hơn hơn điểm dừng. bước không được bằng không (hoặc giá trị ValueError được nâng lên). Ví dụ:

>>> 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) [] 

Trong trường hợp của bạn để có được [0,2,4] bạn có thể sử dụng:

range(0,6,2) 

HOẶC trong trường hợp của bạn khi là một 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 
+0

thankyou !, loại, nhưng tham số bước của tôi là một biến .. không phải là hằng số cố định, xem java của tôi Mã phiên bản .. t – runcode

+0

Kiểm tra mẫu mới nhất - có chấp nhận được không? –

+0

có! wow, nó không phải là staright về phía trước để thực hiện điều này trên python ... – runcode

4

Bạn có thể chỉ sử dụng vòng lặp tốt hơn là cho vòng lặp này. Tôi đã dịch mã của bạn trực tiếp từ mã 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

Trong trăn, cho vòng lặp qua lặp, thay vì tăng bộ đếm, vì vậy bạn có một vài lựa chọn. Sử dụng cờ bỏ qua như Artsiom được khuyến nghị là một cách để làm điều đó. Một tùy chọn khác là tạo một trình tạo từ phạm vi của bạn và tự động tiến hành nó bằng cách loại bỏ một phần tử bằng cách sử dụng next().

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

Nhưng điều này không phải là khá hoàn chỉnh vì next() có thể ném một StopIteration nếu nó đạt đến cuối của dãy núi này, vì vậy bạn có thêm một số logic để phát hiện và phá vỡ ra khỏi vòng lặp bên ngoài nếu điều đó xảy ra.

Cuối cùng, tôi có thể đi với giải pháp của aw4ully với các vòng lặp trong khi.

Các vấn đề liên quan