我有一个包含混合案例的字符串,例如“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
我已经回顾了类似的问题,但没有人给我答案。
答案 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
没有。