2013-12-14 7 views

ответ

6

Не уверен, насколько быстро вам это нужно, но если вы ищете самое быстрое решение там. translate функция Строковый модуля Python является немного более окольным, хотя в целом более производительным способом:

import string 

transtab = string.maketrans(string.uppercase, '*'*len(string.uppercase)) 
"aBCd3Fg".translate(transtab) 

>>>'a**d3*g' 

Я всегда удивляюсь, как много людей не знают об этой хитрости. Один из самых охраняемых секретов в питона IMO

+0

Это была бы моя рекомендация. – mgilson

+0

@mgilson Рад это слышать, менее багги, чем регулярное выражение, и 2-5 так же быстро, а также чуть ниже сложности. –

2
string = ''.join(['*' if x.isupper() else x for x in string]) 
+0

Забавный факт: Если вы долго условного оператора C-стиле, вы можете сократить ваше выражение '«*», если г == r.upper() еще r' с эквивалент '(r, '*') [r.isupper()]'. –

+0

@DarrenStone - Это удалит свойство короткого замыкания троичного, а также займет больше времени для обработки. :) – iCodez

+0

@DarrenStone, я знаю об этом синтаксисе, но на него обычно нахмурились большинство пользователей python. – smac89

-3

Вы также можете сделать:

for x in myString: 
    if (x == 'A','B','C','D','E','F','G','H','I','J','K','L','M', 
    'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'" 
     x = '*' 

Это небольшой фрагмент кода, который будет выполнять работу.

+0

Почему весь отрицательный отзыв? Разве это не законный ответ? – kiasy

+0

Я не дубликатор, но этот ответ не так короток и не будет делать работу, как она показана. – Robert

0

Простое решение:

input = "aBCd3Fg" 
output = "".join(['*' if 'A' <= char <= 'Z' else char for char in input ]) 
#Long version 
input = "aBCd3Fg" 
output = '' 
for char in input: 
    output = output + '*' if ord('A') <= ord(char) <= ord('Z') else output + char 
print output 
Смежные вопросы