Распаковка списка с помощью троичного

#python

#python

Вопрос:

 test = [1,2]
one, two = test[:]
print(one)
print(two)
one, two = test[:] if len(test)==2 else test[0], test[0]
print(one)
print(two)
 

Вывод:

 1, 2, [1, 2], 1
 

Почему распаковка списка завершается неудачно при использовании if в качестве троичного оператора?

Комментарии:

1. one, two = test[:] if len(test)==2 else (test[0], test[0]) ?

Ответ №1:

Проблема здесь в приоритете:

 test[:] if len(test)==2 else test[0], test[0]
 

анализируется как

 (test[:] if len(test)==2 else test[0]), test[0]
 

Это не то, что вы хотите. Используйте круглые скобки вручную:

 test[:] if len(test)==2 else (test[0], test[0])