2016-05-30 2 views
0

Как новичок Python, это может быть глупый вопрос, но я не могу найти решение. Я делаю продукт кортежа, и прекрасно работает, как это:Продукт кортежа

list = list(itertools.product(["this", "the"],["example", "test"],["is not", "isnt"],[" working", "correct"])) 
print(list) 

Но если объявить другую переменную, она больше не работает:

test = ["this", "the"],["example", "test"],["is not", "isnt"],[" working", "correct"] 
list = list(itertools.product(test)) 
print(list) 

Я проверил с type() функция, чтобы получить класс, и это кортеж ...

Я бегу это на Python 3.x, но я хотел бы сделать его совместимым для 2.7

ответ

2

Во-первых, плохо использовать list в качестве имени переменной, так как это перезаписывает функцию list по умолчанию.

В вашем первом рабочем примере вы передаете несколько аргументов itertools.product, и он объединяет каждый аргумент, чтобы предоставить нужный вам результат. В вашем примере без работы вы передаете только один аргумент, кортеж test. К счастью, вы можете использовать кортеж распаковку синтаксис языка Python для расширения каждого элемента кортежа в качестве аргумента:

test = ["this", "the"],["example", "test"],["is not", "isnt"],[" working", "correct"] 
# The * before test unpacks the tuple into separate arguments 
result2 = list(itertools.product(*test)) 
print(result2) 
[('this', 'example', 'is not', ' working'), ('this', 'example', 'is not', 'correct'), ('this', 'example', 'isnt', ' working'), ('this', 'example', 'isnt', 'correct'), ('this', 'test', 'is not', ' working'), ('this', 'test', 'is not', 'correct'), ('this', 'test', 'isnt', ' working'), ('this', 'test', 'isnt', 'correct'), ('the', 'example', 'is not', ' working'), ('the', 'example', 'is not', 'correct'), ('the', 'example', 'isnt', ' working'), ('the', 'example', 'isnt', 'correct'), ('the', 'test', 'is not', ' working'), ('the', 'test', 'is not', 'correct'), ('the', 'test', 'isnt', ' working'), ('the', 'test', 'isnt', 'correct')] 
+0

Как получить itertools работать? – BradTheBrutalitist

+0

@BradTheBrutalitist вы предлагаете мне добавить 'import itertools' в верхней части моего ответа? Это не было показано в оригинальных примерах, поэтому я предположил, что это подразумевается. В противном случае я не уверен, если я пойму вопрос, вы можете уточнить? – Marius

+0

Нет, я просто говорю, что я очень люблю его. – BradTheBrutalitist