否则如果在Python3

时间:2016-10-31 19:58:59

标签: python list python-3.x

我有一个包含混合案例的字符串,例如“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

我已经回顾了类似的问题,但没有人给我答案。

6 个答案:

答案 0 :(得分:7)

坚持你的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']

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

答案 3 :(得分:1)

以@ Mooingrawr的答案为例,如果你叠加列表理解,人们可能会发现它的构造和理解更容易一些。如果堆叠,您可以在该行内进行评论。如果你想将它恢复为一行,那么你可以删除评论并制作每个人都喜欢的单行。

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)

答案 4 :(得分:1)

简单的解决方案,

char = "aBcDeF" 

print(char.upper().replace("B", "b"))
AbCDEF

[Program finished] 

答案 5 :(得分:0)

除了@MooingRawr之外,我还要补充说你确实会收到语法错误,因为你不能使用没有else值的条件表达式。

例如,a = 3 if blah引发了一个SyntaxError,但a = 3 if blah else 4没有。