【问题标题】:else if in list comprehension in Python3else if 在 Python3 的列表理解中
【发布时间】:2016-10-31 19:58:58
【问题描述】:

我有一个混合大小写的字符串,例如“aBcDeF”。 我想将所有小写字母大写,对于大写字母,如果它们是字母“B”,则仅将它们小写。意思是,我想要结果“AbCDEF”。 我试过在列表理解中这样做:

x = [str.upper(char) if char.islower() 
else str.lower(char) if char == "B" for char in "aBcDeF"]
  • 换行符只是为了阅读方便,在我的代码中它们被加入

但是,我收到以下语法错误:

Traceback (most recent call last):
  File "python", line 11
    else str.lower(char) if char == "B" for char in "aBcDeF"]
                                          ^
SyntaxError: invalid syntax

我查看过类似的问题,但没有人为我提供答案。

【问题讨论】:

  • [str.upper(char) if char.islower() else str.lower(char) if char == "B" else char for char in "aBcDeF"]
  • 这与列表推导无关;这只是正确使用条件表达式。

标签: python list python-3.x


【解决方案1】:

坚持if-else 列表理解的精神。

print([str.lower(char) if char.isupper() and char =='B' else str.upper(char) for char in "aBcDeF"])

打印:

['A', 'b', 'C', 'D', 'E', 'F']

【讨论】:

    【解决方案2】:
    [char.upper() if char != 'B' else char.lower() for char in "aBcDeF"]
    

    【讨论】:

      【解决方案3】:

      @MooingRawr 为您的具体情况提供了最佳答案,但如果您真的想在列表理解中包含多个 if 语句,您可能需要执行以下操作:

      [x.upper() if x.islower() else x.lower() if x=='B' else x.upper() for x in "aBcDeF"]
      

      第二个(嵌入的)if 语句周围的括号可能更容易理解:

      [x.upper() if x.islower() else (x.lower() if x=='B' else x.upper()) for x in "aBcDeF"]
      

      这在您的情况下并不理想,因为您已经写了两次x.upper()

      这基本上等同于:

      new_str = ''
      
      for x in "aBcDeF":
          if x.islower():
              new_str += x.upper()
          elif x == 'B';
              new_str += x.lower()
          else:
              new_str += x.upper()
      

      【讨论】:

        【解决方案4】:

        以@Mooingrawr 的回答为例,如果您堆叠列表理解,人们可能会发现它的构造和理解更容易一些。如果它是堆叠的,您可以在该行内发表评论。如果您想将其还原为一行,则可以移除 cmets 并制作每个人都喜欢的单行。

        r = [str.lower(char)                  # Do this
             if char.isupper() and char =='B' # if this
             else str.upper(char)             # else this
             for char in "aBcDeF"]            # using these
        print(r)
        

        【讨论】:

          【解决方案5】:

          简单的解决方案,

          char = "aBcDeF" 
          
          print(char.upper().replace("B", "b"))
          
          AbCDEF
          
          [Program finished] 
          

          【讨论】:

            【解决方案6】:

            除了@MooingRawr,我还要补充一点,您确实会遇到语法错误,因为您不能使用没有 else 值的条件表达式。

            例如,a = 3 if blah 会引发 SyntaxError,但 a = 3 if blah else 4 不会。

            【讨论】:

              猜你喜欢
              • 2019-11-26
              • 1970-01-01
              • 1970-01-01
              • 2018-04-27
              • 2023-03-14
              • 2011-05-23
              • 2022-01-05
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多