2016-11-22 14 views
-1

我是python新手,我使用python 2.7
我想創建腳本,它是更改字符串中的每個字母的情況。 如果我通過「ABcdE」腳本將給出輸出「abCDe」
有很多方法,但我想使用List Comprehensions執行此任務。python:分配或更新列表解析中的參數

我用下面的代碼:

str = 'abcDE'; 
str1 = [x for x in str if ord(x)>=97 and ord(x)<=122 x-32 elif ord(x)>=65 and ord(x)<=90 x+32]; 

這是給我Invalid syntax錯誤。 我不明白什麼是錯誤。 我已經嘗試了另一個版本:
請看附加的截圖。 enter image description here

當你看最後一次嘗試。當我刪除更新可變代碼它運行成功。 我的問題是爲什麼變量修改在Comprehensions中不起作用?

+1

沒有'的列表內涵elif'選項,沒有。 –

+0

用括號括起來的x-32試過,就像x =(x-32)一樣? – edlee

+0

請注意,您的控制檯輸出是** text **。請複製並粘貼該文字,截圖不可搜索。 –

回答

1

您需要使用條件表達式;您正在使用過濾,而過濾器無法更改生成的內容,只限制考慮哪些元素。

的左側表達應該被改變,使得用於在迭代的每個元件產生的值的部分:在yourstring

[x.upper() if 122 >= ord(x) >= 97 else x.lower() 
for x in yourstring] 

上述處理的所有字母(I改名以避免使用內置名稱str),並且對於每個這樣的字母(在x中),如果它是小寫字母,則使用大寫字母,否則使用小寫字母。

演示:

>>> yourstring = 'abcDE' 
>>> [x.upper() if 122 >= ord(x) >= 97 else x.lower() for x in yourstring] 
['A', 'B', 'C', 'd', 'e'] 

如果你想有一個新的字符串,用''.join()

''.join([x.upper() if 122 >= ord(x) >= 97 else x.lower() 
     for x in yourstring]) 

或者你可以只使用內置str.swapcase() function做同樣的工作。

+0

我的主要問題是我們可以修改或更新Comprehensions中的變量嗎? –

+0

@VishalPatel你不能分配給'x',否。你不需要。 –

0

你可以做到以下幾點:

str1 = [x.lower() if x.isupper() else x.upper() for x in str]