# python – Removing numbers from string

## python – Removing numbers from string

Would this work for your situation?

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

This makes use of a list comprehension, and what is happening here is similar to this structure:

```
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)
```

As @AshwiniChaudhary and @KirkStrauser point out, you actually do not need to use the brackets in the one-liner, making the piece inside the parentheses a generator expression (more efficient than a list comprehension). Even if this doesnt fit the requirements for your assignment, it is something you should read about eventually ðŸ™‚ :

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

And, just to throw it in the mix, is the oft-forgotten `str.translate`

which will work a lot faster than looping/regular expressions:

For Python 2:

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

For Python 3:

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

#### python – Removing numbers from string

Not sure if your teacher allows you to use filters but…

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

returns-

```
aaasdffgh
```

Much more efficient than looping…

**Example:**

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