Nummers verwijderen van string

Hoe kan ik cijfers van een string verwijderen?


Antwoord 1, Autoriteit 100%

zou dit werk voor uw situatie?

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

Dit maakt gebruik van een lijstbegrip en wat er hier gebeurt is vergelijkbaar met deze structuur:

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)

Als @ashwinichaudhary en @kirkstrauser verwijzen, hoef je eigenlijk de beugels in de one-liner niet te gebruiken, waardoor het stuk binnen de haakjes een generatoruitdrukking (efficiënter is dan een lijstbegrip). Zelfs als dit niet bij de vereisten voor uw opdracht past, is het iets waar u uiteindelijk over moet lezen :):

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

Antwoord 2, Autoriteit 50%

En, gewoon om het in de mix te gooien, is de OFT-Forgotten str.translatedie een stuk sneller zal werken dan looping / reguliere uitdrukkingen:

voor python 2:

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

Voor Python 3:

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

Antwoord 3, Autoriteit 9%

Niet zeker of uw leraar u toestaat om filters te gebruiken, maar …

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

Returns –

'aaasdffgh'

Veel efficiënter dan looping …

Voorbeeld:

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

Antwoord 4, Autoriteit 3%

Hoe zit het hiervan:

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

Antwoord 5, Autoriteit 2%

Slechts een paar (anderen hebben enkele van deze gesuggereerd)

Methode 1:

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

Methode 2:

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

Methode 3:

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

Methode 4:

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

Methode 5:

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

Antwoord 6, autoriteit 2%

Zeg dat st je niet-opgemaakte tekenreeks is, en voer dan uit

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

zoals hierboven vermeld.
Maar ik denk dat je iets heel eenvoudigs nodig hebt
dus zeg sis je string
en st_resis een string zonder cijfers, dan is hier je code

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

Antwoord 7

Ik zou graag regex gebruiken om dit te bereiken, maar aangezien je alleen lijsten, loops, functies, enz. kunt gebruiken.

hier is wat ik bedacht:

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!

Antwoord 8

Als ik je vraag goed begrijp, kun je de tekenreeks opsplitsen in tekens en vervolgens elk teken in die tekenreeks controleren met een lus of het een tekenreeks of een getal is en vervolgens als tekenreeks het opslaat in een variabele en dan zodra de lus is voltooid, laat u dat aan de gebruiker zien

Other episodes