是否有可能在元组中有一个if?

Hof*_*ann 2 python if-statement conditional-expressions

我想构建类似的东西:

A = (
  'parlament',
  'queen/king' if not country in ('england', 'sweden', …),
  'press',
  'judges'
)
Run Code Online (Sandbox Code Playgroud)

有没有办法建立这样的元组?

我试过了

'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 (),
Run Code Online (Sandbox Code Playgroud)

但没有什么工作,似乎没有元组 - 无元素,所以我为英格兰,瑞典等国家的所有国家提供了3元组,我得到了一个4元组

Ter*_*ryA 8

是的,但你需要一份else声明:

>>> country = 'australia'
>>> A = (
...   'parlament',
...   'queen/king' if not country in ('england', 'sweden') else 'default',
...   'press',
...   'judges'
...      )
>>> print A
('parlament', 'queen/king', 'press', 'judges')
Run Code Online (Sandbox Code Playgroud)

另一个例子:

>>> country = 'england'
>>> A = (
...   'parlament',
...   'queen/king' if not country in ('england', 'sweden') else 'default',
...   'press',
...   'judges'
...    )
>>> print A
('parlament', 'default', 'press', 'judges')
Run Code Online (Sandbox Code Playgroud)

这是一个条件表达式,也称为三元条件运算符.


ole*_*leg 5

可以建议您以下

\n\n
A = (('parlament',) +\n     (('queen/king',) if not country in ('england', 'sweden', \xe2\x80\xa6) else tuple()) +\n     ('press', 'judges'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

这允许您在结果元组中包含或不包含元素(与默认值不同,如果您不使用元组串联,则会包含默认值。

\n\n
A = ('parlament',\n     'queen/king' if not country in ('england', 'sweden', \xe2\x80\xa6) else 'default',\n     'press', 'judges')\n
Run Code Online (Sandbox Code Playgroud)\n