2010-04-19 4 views
2

Я хочу сгенерировать кортеж кортежа в форме ((x1, y1, x2, y2), ... (x1, y1, x2, y2)) где x1, y1, x2, y2 все находятся в диапазоне (0,8).Любой лучший способ генерации кортежа всех возможных кортежей в виде (x1, y1, x2, y2)?

Есть ли другой способ, а не следующее?

S = list() 
for x1 in range(0, 8): 
    for y1 in range(0, 8): 
     for x2 in range(0, 8): 
      for y2 in range(0, 8): 
       S.append([x1,y1,x2,y2]) 
S = tuple(S)  

благодаря

ответ

7
tuple([x1, y1, x2, y2] for x1 in range(0, 8) for x2 in range(0, 8) for y1 in range(0, 8) for y2 in range(0, 8)) 

Или

import itertools 
a = [range(0,8)]*4 
print tuple(itertools.product(*a)) 

Обратите внимание, что это возвращает кортеж кортежей. Если вам нужен кортеж из списков, используйте tuple(itertools.imap(list, itertools.product(*a))).

+0

+1 для itertools. –

+0

itertools на помощь, +1 – Agos

+2

Вы также можете использовать аргумент ключевого слова 'repeat' для хорошего эффекта:' tuple (itertools.product (range (8), repeat = 4)) ' –

Смежные вопросы