2012-02-03 2 views
1

У меня есть список имен:В python, как вы не изменяете случай каждой буквы в элементе списка?

name_list = ['brad', 'james', 'joe', 'alex'] 

и нужно изменить все буквы в верхнем регистре для а, за исключением, так что я бы:

name_list = ['BRaD', 'JaMES', 'JOE', 'aLEX'] 

Я знаю, как изменить все буквы в верхнем регистре:

for name in range(0, len(name_list), 1: 
    name_list[name] = name_list[name].upper 

Но я потерял, как не изменить случай «а».

Спасибо!

+0

Возможный дубликат [Ite (http://stackoverflow.com/questions/7648878/iterate-python-list-and-capitalize-specific-letters) – JBernardo

+4

Похоже, ваш учитель год за годом выполняет одни и те же домашние задания ... – JBernardo

ответ

1
name_list = [''.join(l.upper() if l!='a' else l for l in word) for word in name_list] 
+0

Gah. Прошу прощения за публикацию этого вопроса после того, как я понял его домашнюю работу: -/ – jdi

3

Вот решение, использующее str.translate():

import string 

table = string.maketrans(string.ascii_lowercase, 
         string.ascii_uppercase.replace('A', 'a')) 

>>> [name.translate(table) for name in name_list] 
['BRaD', 'JaMES', 'JOE', 'aLEX'] 

Или альтернативное решение с использованием регулярных выражений:

>>> import re 
>>> regex = re.compile(r'[^a]+') 
>>> repl = lambda m: m.group(0).upper() 
>>> [regex.sub(repl, name) for name in name_list] 
['BRaD', 'JaMES', 'JOE', 'aLEX'] 
+0

Эта версия регулярного выражения - это величины медленнее, чем ваша первая. Я бы придерживался вашего первого – jdi

+0

@jdi - Полезно знать, я не нашел времени, чтобы провести сопоставления времени. –

+0

Вы получаете 35% -ное увеличение, если предварительно предварительно скомпилируете регулярное выражение: 'rx = re.compile (r '[^ a] +')' – jdi

13

Преобразовать в верхний регистр, а затем изменить "А" с до "а" с

[name.upper().replace("A", "a") for name in name_list] 
+0

Ahh, я думал о чем-то подобном, но способы, которые я пытался, т работы. Благодаря! – user1186420

+0

Этот способ более эффективен, чем мой, и проще, чем другое решение str.translate() – jdi

Смежные вопросы