2011-08-23 24 views
7

tôi muốn làm một cái gì đó giống nhưNested cho vòng bằng Python

for a in [0..1]: 
    for b in [0..1]: 
     for c in [0..1]: 
      do something 

Nhưng, tôi có thể có 15 biến số khác nhau. Có một cách đơn giản như

for a, b, c in [0..1]: 
    do something 

Nhờ sự giúp đỡ

Trả lời

10

itertools.product:

import itertools 
for a,b,c in itertools.product([0, 1], repeat=3): 
    # do something 
+3

Sử dụng 'repeat = 3' – agf

+0

@agf Cảm ơn, đã hoàn tất! Mặc dù '[[0,1]] * 3' trông cũng đẹp. – phihag

+4

Đơn khiếu nại duy nhất của tôi là mất nhiều thời gian để bạn trả lời. Có một khoảng thời gian khoảng 30 giây, nơi tôi đã ở trong tình trạng lấp lửng. – Graphth

3

Bạn có thể lặp qua các sản phẩm của tất cả chúng. Sử dụng itertools.product và vượt qua trong phạm vi của bạn.

import itertools 
for i in itertools.product(range(2), range(3), range(2)): 
print (i) 

mang

(0, 0, 0) 
(0, 0, 1) 
(0, 1, 0) 
(0, 1, 1) 
(0, 2, 0) 
(0, 2, 1) 
(1, 0, 0) 
(1, 0, 1) 
(1, 1, 0) 
(1, 1, 1) 
(1, 2, 0) 
(1, 2, 1) 
1

Có vẻ như bạn có một ma trận/danh sách các biến bạn cần phải xử lý. Do đó, giải pháp tốt nhất (và nhanh nhất) là sử dụng công cụ ma trận/danh sách.

Chẳng hạn như: Gói Python itertools.

Như người khác đã gợi ý, itertools.product có lẽ là những gì bạn muốn. Tuy nhiên, hãy xem danh sách đầy đủ tại: http://docs.python.org/library/itertools.html

Chúc may mắn.