Удаление номеров из строки

Как удалить цифры из строки?

Будет ли это работать для вашей ситуации?

 >>> s = '12abcd405' >>> result = ''.join([i for i in s if not i.isdigit()]) >>> result 'abcd' 

Это использует понимание списка, и то, что здесь происходит, похоже на эту структуру:

 no_digits = [] # Iterate through the string, adding non-numbers to the no_digits list for i in s: if not i.isdigit(): no_digits.append(i) # Now join all elements of the list with '', # which puts all of the characters together. result = ''.join(no_digits) 

Как отмечают @AshwiniChaudhary и @KirkStrauser, вам фактически не нужно использовать скобки в одном слое, делая кусок внутри круглых скобок выражением генератора (более эффективным, чем понимание списка). Даже если это не соответствует требованиям для вашего задания, это то, о чем вы должны прочитать в конце концов :):

 >>> s = '12abcd405' >>> result = ''.join(i for i in s if not i.isdigit()) >>> result 'abcd' 

И просто, чтобы бросить его в микс, это часто забытый str.translate который будет работать намного быстрее, чем циклические / регулярные выражения:

Для Python 2:

 from string import digits s = 'abc123def456ghi789zero0' res = s.translate(None, digits) # 'abcdefghizero' 

Для Python 3:

 from string import digits s = 'abc123def456ghi789zero0' remove_digits = str.maketrans('', '', digits) res = s.translate(remove_digits) # 'abcdefghizero' 

Не уверен, что ваш учитель позволяет использовать фильтры, но …

 filter(lambda x: x.isalpha(), "a1a2a3s3d4f5fg6h") 

ВОЗВРАЩЕНИЯ

 'aaasdffgh' 

Гораздо эффективнее, чем цикл …

Пример:

 for i in range(10): a.replace(str(i),'') 

Как насчет этого:

 out_string = filter(lambda c: not c.isdigit(), in_string) 

Несколько (другие предложили некоторые из них)

Способ 1:

 ''.join(i for i in myStr if not i.isdigit()) 

Способ 2:

 def removeDigits(s): answer = [] for char in s: if not char.isdigit(): answer.append(char) return ''.join(char) 

Способ 3:

 ''.join(filter(lambda x: not x.isdigit(), mystr)) 

Способ 4:

 nums = set(map(int, range(10))) ''.join(i for i in mystr if i not in nums) 

Способ 5:

 ''.join(i for i in mystr if ord(i) not in range(48, 58)) 

Скажем st – ваша неформатированная строка, затем запустите

 st_nodigits=''.join(i for i in st if i.isalpha()) 

как уже упоминалось выше. Но я предполагаю, что вам нужно что-то очень простое, поэтому скажите s, что ваша строка, а st_res – строка без цифр, а вот ваш код

 l = ['0','1','2','3','4','5','6','7','8','9'] st_res="" for ch in s: if ch not in l: st_res+=ch 

Я хотел бы использовать регулярное выражение для выполнения этого, но поскольку вы можете использовать только списки, циклы, функции и т. Д.

вот что я придумал:

 stringWithNumbers="I have 10 bananas for my 5 monkeys!" stringWithoutNumbers=''.join(c if c not in map(str,range(0,10)) else "" for c in stringWithNumbers) print(stringWithoutNumbers) #I have bananas for my monkeys! 

Если я правильно понимаю ваш вопрос, один способ сделать это сломать строку в символах, а затем проверить каждый символ в этой строке, используя цикл, будь то строка или число, а затем, если строка сохранит ее в переменной, а затем после цикла завершено, отобразите это для пользователя