с регулярным выражением вам нужно будет добавить \. Кроме того, я думаю, что это может быть десятичное число. как result = re.sub (r '[0-9 \.] +', '', s)
GurhanCagin
1
"\d"то же самое в регулярном выражении, что и "[0-9]", поэтому вы можете сделать это result = re.sub(r"\d+", "", s)вместо. Скорость, вероятно, будет зависеть от конкретной используемой строки, но для меня это re.subзаняло примерно вдвое больше str.translate(немного больше, если вы не используете предварительно скомпилированный шаблон).
Натан
Ответы:
185
Подойдет ли это для вашей ситуации?
>>> s ='12abcd405'>>> result =''.join([i for i in s ifnot i.isdigit()])>>> result
'abcd'
Это использует понимание списка, и то, что здесь происходит, похоже на эту структуру:
no_digits =[]# Iterate through the string, adding non-numbers to the no_digits listfor i in s:ifnot 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 ifnot i.isdigit())>>> result
'abcd'
Было бы целесообразно показать на них сравнение эффективности.
nu everest
2
Скажите, что 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 notin l:
st_res+=ch
Я бы с удовольствием использовал регулярное выражение для этого, но поскольку вы можете использовать только списки, циклы, функции и т. Д.
вот что я придумал:
stringWithNumbers="I have 10 bananas for my 5 monkeys!"
stringWithoutNumbers=''.join(c if c notin map(str,range(0,10))else""for c in stringWithNumbers)print(stringWithoutNumbers)#I have bananas for my monkeys!
Если я правильно понимаю ваш вопрос, один из способов сделать это - разбить строку на символы, а затем проверить каждый символ в этой строке с помощью цикла, будь то строка или число, а затем, если строка, сохраните ее в переменной, а затем после цикла закончено, покажите это пользователю
re
:result = re.sub(r'[0-9]+', '', s)
"\d"
то же самое в регулярном выражении, что и"[0-9]"
, поэтому вы можете сделать этоresult = re.sub(r"\d+", "", s)
вместо. Скорость, вероятно, будет зависеть от конкретной используемой строки, но для меня этоre.sub
заняло примерно вдвое большеstr.translate
(немного больше, если вы не используете предварительно скомпилированный шаблон).Ответы:
Подойдет ли это для вашей ситуации?
Это использует понимание списка, и то, что здесь происходит, похоже на эту структуру:
Как отмечают @AshwiniChaudhary и @KirkStrauser, вам на самом деле не нужно использовать скобки в однострочном тексте, что делает часть внутри скобок выражением генератора (более эффективным, чем понимание списка). Даже если это не соответствует требованиям вашего задания, в конце концов вам стоит прочитать об этом :):
источник
[]
И, просто чтобы добавить его в смесь, это часто забываемое,
str.translate
которое будет работать намного быстрее, чем циклы / регулярные выражения:Для Python 2:
Для Python 3:
источник
'abc123def456ghi789zero0'.translate({ord(k): None for k in digits})
Не уверен, разрешает ли ваш учитель использовать фильтры, но ...
ВОЗВРАЩЕНИЯ
Намного эффективнее, чем цикл ...
Пример:
источник
Как насчет этого:
источник
<filter object at 0x7f749e1745c0>
. Python3.6Всего несколько (другие предлагали некоторые из них)
Способ 1:
Способ 2:
Способ 3:
Метод 4:
Метод 5:
источник
Скажите, что st - ваша неформатированная строка, затем запустите
как уже упоминалось выше. Но я предполагаю, что вам нужно что-то очень простое, например, s - это ваша строка, а st_res - строка без цифр, тогда вот ваш код
источник
Я бы с удовольствием использовал регулярное выражение для этого, но поскольку вы можете использовать только списки, циклы, функции и т. Д.
вот что я придумал:
источник
Если я правильно понимаю ваш вопрос, один из способов сделать это - разбить строку на символы, а затем проверить каждый символ в этой строке с помощью цикла, будь то строка или число, а затем, если строка, сохраните ее в переменной, а затем после цикла закончено, покажите это пользователю
источник