【问题标题】:Is it possible to have an if inside a tuple?元组中是否可以有 if ?
【发布时间】:2013-06-08 07:31:26
【问题描述】:

我想构建类似的东西:

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 (),

但没有任何效果,似乎没有元组-无元素,所以除了英格兰、瑞典等国之外,我有一个 3 元组,我得到了一个 4 元组

【问题讨论】:

  • 如果元组的数量不是恒定的,那么它不太可能是您想要的。你需要一个list,或者一个四元组,它在第二个字段中总是有一些东西(例如None)。如果你能解释你打算如何使用它,我们就能给你更好的答案。
  • 您尝试的方法似乎对我有用。究竟是什么行不通。你收到SyntaxError了吗?
  • 我可以使用list,但这并不能解决我寻找“do-insert-nothing”-else case 的问题

标签: python if-statement conditional-expressions


【解决方案1】:

是的,但您需要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')

这是一个conditional expression,也称为三元条件运算符。

【讨论】:

  • 让 A 成为一个国家的统治力量,“默认”如何适应?
  • @Hoffmann 这只是我编的一个字符串。你可以随心所欲地搭配它:)
  • 但是没有有意义的价值,而且答案得到了这么多票,我认为它具有误导性。 (另外我会删除反对票,但我不能,因为我也认为这太苛刻了)
  • @Hoffmann 我将编辑问题,以便您将其删除。给予赞成票是因为它回答了您的问题(而且他们似乎也喜欢它)。你想让我也改变字符串吗:)?
  • 是的,请将其更改为“spaghettiMonster”,因为它也可能是一个统治力量;-) - 但是,你是对的,我不需要尝试“纠正”这个决定其他人
【解决方案2】:

是的,你可以,但你的三元条件必须是有效的,即你也需要一个else 子句。

python中的三元运算符:

>>> 'x' if False else 'y'
'y'

您的代码:

A = (
  'parlament',
  'queen/king' if not country in ('england', 'sweden') else 'foo',
  'press',
  'judges'
   )

【讨论】:

  • 我想你实际上说不,你不能。但问题不清楚。
【解决方案3】:

可以建议你关注

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')

【讨论】:

  • 对于任何使用此解决方案的人,请注意不要忘记元组中的 , 否则它会爆炸
【解决方案4】:

您可以使用三元条件运算符 例如:

A= ('a', 'b', 'c' if condition else 'd')

【讨论】:

    【解决方案5】:

    我遇到了类似的问题。您可以使用扩展运算符*

    A = (
      'parlament',
      *(('queen/king',) if not country in ('england', 'sweden', …) else tuple()),
      'press',
      'judges'
    )
    

    看起来有点复杂,但完全符合要求。首先,它将所需的任何答案“打包”到一个元组中(产生一个空元组或一个单元素元组)。然后,它“解包”生成的元组并将其合并到主外部元组中的正确位置

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      相关资源
      最近更新 更多