我有蟒蛇名單,我想重複和把握每一個字母,是不是「A」,所以把該名單:迭代Python列表和利用特定的字母
['albert', 'angela', 'leo', 'bridget']
分爲:
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
我有蟒蛇名單,我想重複和把握每一個字母,是不是「A」,所以把該名單:迭代Python列表和利用特定的字母
['albert', 'angela', 'leo', 'bridget']
分爲:
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
現有的答案似乎都希望在字符單獨操作。它是簡單和容易只是處理的話作爲一個整體:
>>> the_list = ['albert', 'angela', 'leo', 'bridget']
>>> [ word.upper().replace('A', 'a') for word in the_list]
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
即將發佈此信息。我認爲它比其他答案要好,因爲它呼叫的方式少,條件不好。 – pyInTheSky
除非你有'艾伯特',並且你希望它變成'ALBERT'而不是'aLBERT'。但是從例子中不清楚是否允許大寫字母開頭。 (而且我的答案並不是單獨對字符進行操作,甚至使用比這個更少的函數調用,@pyInTheSky,n + 3而不是n * 2,儘管它不適用於非ASCII字符。) – agf
非常不錯,我以前用過它,但不知道它是那麼快 – pyInTheSky
[''.join(c.upper() if c != 'a' else c for c in word) for word in the_list]
@EOL:我認爲使用'map'功能的解決方案可能會更簡單,但不會太多.. –
@machineyearning每次有人說地圖比理解更好時,閃電擊中了一隻小貓...只是說 – JBernardo
@EOL:簡單就是'[word.upper()。替換('A','a')for_list]中的單詞。這可以將「Adam」轉換爲「aDaM」。 –
的不雅方法很簡單
lst = ['albert', 'angela', 'leo', 'bridget']
lst2 = []
for wrd in lst:
newwrd = ''
for ltr in wrd:
if ltr != 'a':
newwrd += ltr.upper()
else: newwrd += ltr
lst2.append(newwrd)
但是名單complrehensions會更Python
lst = ['albert', 'angela', 'leo', 'bridget']
[''.join(ltr.upper() if ltr != 'a' else 'a' for ltr in wrd) for wrd in lst]
這實質上嵌套列表內涵代替嵌套循環。 這是一個更簡潔的解決方案,更容易理解
列表理解是一個表達式(ltr.upper()if ltr =='a')後跟「for」,然後是選項if子句。在這裏我們有兩個(我看@JBernardo做了同樣的事情),它們的行爲方式與嵌套for循環相同。
我希望能幫助解釋這些差異。
>>> import re
>>> sl = ['albert', 'angela', 'leo', 'bridget']
>>> [re.sub('[^a]+', lambda m: m.group(0).upper(), s) for s in sl]
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
這不適用於重音字母... – EOL
也許這不是@EOL。正則表達式 - 這取決於。在thouzands字符串中,正則表達式比JBernardo的解決方案快幾倍(可以用'timeit'來檢查)。他們也是最靈活的,以防任務變得更加複雜,然後只是「一個或一個」。 – hamstergene
+1:顯式和高效(在長字符串上)。 – EOL
這是str.translate
是:
import string
table = string.maketrans(string.ascii_lowercase.replace('a', ''),
string.ascii_uppercase.replace('A', ''))
names = ['albert', 'angela', 'leo', 'bridget']
print [name.translate(table) for name in names]
translate
花費256字符表,讓你用string.maketrans
把代表小寫和大寫字母爲表string constants。任何未出現在表格中的字母都將被忽略,因此刪除a
和A
將會大寫所有其他字母。
然後只需將轉換表應用到列表中的每個名稱。
它會比遍歷每個名稱更快,並且每個字母都會調用upper
,但是每個字母都會更快,但是a
。雖然通用的Python工具使這一切變得簡單,但這是專門爲此工作制作的工具。
如果你想從事的函數式編程範式多一點:
def maybe_upper(c, u):
return c.upper() if c in u else c
def some_upper(s, u):
return ''.join(map(lambda c: maybe_upper(c, u), s))
>>> some_upper("wahwahweeeewagh", 'uea')
'wAhwAhwEEEEwAgh'
我建議你看看鄧肯的回答,因爲我相信這將是一個大名單上要好得多。事實上,就在你的名單上,他的答案几乎快了6倍,經過測試,具有timeit模塊 – pyInTheSky
@jwesonga:你能指定如何處理字母'a'和'A'嗎?事實上,有些答案將'阿爾伯塔'轉變爲'阿爾伯塔',而另一些則將其轉化爲'阿爾伯塔'。 – EOL
也可以說你想用重音字母做什麼? – Duncan