2016-10-31 1 views
4

私は大文字と小文字が混在した文字列を持っています。 "aBcDeF"。 大文字の小文字をすべて大文字にし、大文字の文字を小文字にしたい場合は、文字「B」の場合のみ小文字にします。つまり、私は結果を "AbCDEF"にしたい。 私はリスト内包でこれをやって試してみた:他の場合はPython3のリストの理解

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 

私は同様の質問をレビューしましたが、私に答えはありませんでした。

+3

'[str.upper(CHAR)char.islower()他str.lower(CHAR) "ABCDEF" の文字のためのチャー== "B" 他チャーならもし]' – ewcz

+0

リスト内包とは何か。それは条件式の正しい使い方です。 – chepner

答えて

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'] 
3
[char.upper() if char != 'B' else char.lower() for char in "aBcDeF"] 
0

@MooingRawrに加えて、私はあなたが他の値なしで条件式を使用することはできませんので、構文エラーを得るかということを付け加えたいです。

たとえば、a = 3 if blahはSyntaxErrorを発生させますが、a = 3 if blah else 4は発生しません。

3

@MooingRawrはあなたの特定のケースのために最良の答えを持っていますが、あなたが本当にあなたのリスト内包で複数のif文を持っていると思った場合、あなたのような何かしたいと思う:に少し簡単かもしれません

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

をあなたが二回書かx.upper()を持っているので、これはしかし、あなたの場合には理想的ではありません

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

:(埋め込まれた)二ifの文の周りに括弧を理解しています。

これは本質的に同等である:例としてMooingrawrの答え@撮影

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

あなたはリストの内包を積み重ねる場合、人々はその建設を見つけて、少し簡単に理解することがあります。積み重ねられている場合は、行内でコメントすることができます。それを1行に戻したい場合は、コメントを削除して、誰もが愛する1ライナーにすることができます。これは持っていない

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)