【问题标题】:Concat string if condition, else do nothing连接字符串 if 条件,否则什么也不做
【发布时间】:2017-05-13 14:15:05
【问题描述】:

我想将几个字符串连接在一起,并且仅当布尔条件为 True 时才添加最后一个字符串。 像这样(a、b 和 c 是字符串):

something = a + b + (c if <condition>)

但是 Python 不喜欢它。没有else选项有没有很好的方法?

谢谢! :)

【问题讨论】:

  • 是的,条件将计算为 1 或 0,乘法结果将为您提供字符串或空字符串。见this demo。但是,这太模糊了,而且不是直截了当的,我宁愿不要使用它,除非您必须尽可能多地压缩代码(它是为了代码高尔夫)吗?
  • 因为这里的人们倾向于避免 else 如果不需要,希望遵循该准则。

标签: python string if-statement concat


【解决方案1】:

不使用else 尝试以下操作。它通过在条件 False (0) 时索引空字符串和在条件 True (1) 时索引字符串 c 来工作

something = a + b + ['', c][condition]

我不知道你为什么要避免使用 else,否则,下面的代码似乎更具可读性:

something = a + b + (c if condition else '')

【讨论】:

    【解决方案2】:
    a_list = ['apple', 'banana,orange', 'strawberry']
    b_list = []
    
    for i in a_list:
        for j in i.split(','):
            b_list.append(j)
    
    print(b_list)
    

    【讨论】:

      【解决方案3】:

      这是可能的,但不是很 Pythonic:

      something = a + b + c * condition
      

      这将起作用,因为condition * False 将返回'',而condition * True 将返回原始condition。但是,您必须在这里小心,condition 也可以是 01,但任何更大的数字或任何文字都会破坏代码。

      【讨论】:

        【解决方案4】:

        有没有没有else选项的好方法?

        嗯,是的:

        something = ''.join([a, b])
        if condition:
            something = ''.join([something, c])
        

        但我不知道你的意思是字面上没有 else,还是没有整个 if 语句。

        【讨论】:

          【解决方案5】:

          这应该适用于简单的场景 -

          something = ''.join([a, b, c if condition else ''])
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-24
            • 2015-01-24
            • 2018-06-13
            • 2020-10-21
            • 2020-05-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多