Возможно ли иметь if внутри кортежа?
Я хотел бы построить что-то вроде:
A = (
'parlament',
'queen/king' if not country in ('england', 'sweden', …),
'press',
'judges'
)
Есть ли способ создать такой кортеж?
Я старался
'queen/king' if not country in ('england', 'sweden', …) else None,
'queen/king' if not country in ('england', 'sweden', …) else tuple(),
'queen/king' if not country in ('england', 'sweden', …) else (),
но ничего не работает, кажется, что нет элемента tuple-None, поэтому у меня есть 3-кортеж для всех стран, кроме Англии, Швеции и т. д., для которых я получаю 4-кортеж
5 ответов
Может предложить Вам следующее
A = (('parlament',) +
(('queen/king',) if not country in ('england', 'sweden', …) else tuple()) +
('press', 'judges'))
это позволяет вам включать или не включать элементы в кортеж результата (в отличие от значения по умолчанию, которое будет включено, если вы не будете использовать конкатенацию кортежей).
A = ('parlament',
'queen/king' if not country in ('england', 'sweden', …) else 'default',
'press', 'judges')
Да, но вам нужно else
заявление:
>>> country = 'australia'
>>> A = (
... 'parlament',
... 'queen/king' if not country in ('england', 'sweden') else 'default',
... 'press',
... 'judges'
... )
>>> print A
('parlament', 'queen/king', 'press', 'judges')
Другой пример:
>>> country = 'england'
>>> A = (
... 'parlament',
... 'queen/king' if not country in ('england', 'sweden') else 'default',
... 'press',
... 'judges'
... )
>>> print A
('parlament', 'default', 'press', 'judges')
Это условное выражение, иначе называемое троичным условным оператором.
Я столкнулся с похожей проблемой. Вы можете использовать оператор спреда
*
:
A = (
'parlament',
*(('queen/king',) if not country in ('england', 'sweden', …) else tuple()),
'press',
'judges'
)
Выглядит немного сложно, но делает именно то, что требуется. Сначала он «упаковывает» любой необходимый ответ в кортеж (в результате получается либо пустой кортеж, либо кортеж из одного элемента). Затем он «распаковывает» полученный кортеж и объединяет его в нужное место в основном внешнем кортеже.
Да, вы можете, но для этого ваше троичное состояние должно быть действительным, то есть вам требуется else
пункт тоже.
Тернарный оператор в питоне:
>>> 'x' if False else 'y'
'y'
Ваш код:
A = (
'parlament',
'queen/king' if not country in ('england', 'sweden') else 'foo',
'press',
'judges'
)
Вы можете использовать троичный условный оператор, например:
A= ('a', 'b', 'c' if condition else 'd')