В python, как не изменить регистр каждой буквы в элементе списка? - PullRequest
1 голос
/ 03 февраля 2012

У меня есть список имен:

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

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

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

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

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

Но я заблудился, как не изменить регистр 'a'.

Спасибо!

Ответы [ 3 ]

13 голосов
/ 03 февраля 2012

Преобразовать в верхний регистр, затем изменить «A» на «a» s

[name.upper().replace("A", "a") for name in name_list]
3 голосов
/ 03 февраля 2012

Вот решение с использованием 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']
1 голос
/ 03 февраля 2012
name_list = [''.join(l.upper() if l!='a' else l for l in word) for word in name_list]
...