Возможно ли иметь 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')
Другие вопросы по тегам