Это уже сделано и включено в стандартную библиотеку Python 2.6:
import itertools
mylist = ['W', 'X', 'Y', 'Z']
for pair in itertools.combinations(mylist, 2):
print pair # pair is a tuple of 2 elements
Мне кажется довольно питоническим; -)
Обратите внимание, что даже если вы вычисляете много комбинаций, функция combinations()
возвращает итератор, чтобы вы могли сразу начать печатать их. См. документы .
Кроме того, вы ссылаетесь на результат как декартово произведение между списком и самим собой, но это не совсем правильно: декартово произведение будет иметь 16 элементов (4x4). Ваш вывод является подмножеством этого, а именно только 2-элементные комбинации (с повторением не допускается) значений списка.