Python: spaties verwijderen uit lijstobjecten

Ik heb een lijst met objecten toegevoegd uit een mysql-database en spaties bevatten. Ik wil de spaties zoals hieronder verwijderen, maar de code die ik gebruik werkt niet?

hello = ['999 ',' 666 ']
k = []
for i in hello:
    str(i).replace(' ','')
    k.append(i)
print k

Antwoord 1, autoriteit 100%

Strings in Python zijn onveranderlijk (wat betekent dat hun gegevens niet kunnen worden gewijzigd), dus de methode Replace wijzigt de string niet – het retourneert een nieuwe string. U kunt uw code als volgt corrigeren:

for i in hello:
    j = i.replace(' ','')
    k.append(j)

Een betere manier om uw doel te bereiken is echter het gebruik van lijstbegrip. De volgende code verwijdert bijvoorbeeld voorloop- en volgspaties uit elke tekenreeks in de lijst met behulp van strip:

hello = [x.strip(' ') for x in hello]

Antwoord 2, autoriteit 12%

Lijstbegrip [num.strip() for num in hello]is de snelste.

>>> import timeit
>>> hello = ['999 ',' 666 ']
>>> t1 = lambda: map(str.strip, hello)
>>> timeit.timeit(t1)
1.825870468015296
>>> t2 = lambda: list(map(str.strip, hello))
>>> timeit.timeit(t2)
2.2825958750515269
>>> t3 = lambda: [num.strip() for num in hello]
>>> timeit.timeit(t3)
1.4320335103944899
>>> t4 = lambda: [num.replace(' ', '') for num in hello]
>>> timeit.timeit(t4)
1.7670568718943969

Antwoord 3, autoriteit 7%

result = map(str.strip, hello)

Antwoord 4, autoriteit 3%

Tekenreeksmethoden retourneren de gewijzigde tekenreeks.

k = [x.replace(' ', '') for x in hello]

Antwoord 5, autoriteit 3%

Ervan uitgaande dat u geen interne spaties wilt verwijderen:

def normalize_space(s):
    """Return s stripped of leading/trailing whitespace
    and with internal runs of whitespace replaced by a single SPACE"""
    # This should be a str method :-(
    return ' '.join(s.split())
replacement = [normalize_space(i) for i in hello]

Antwoord 6, autoriteit 2%

for element in range(0,len(hello)):
      d[element] = hello[element].strip()

Antwoord 7

replace() werkt niet ter plaatse, je moet het resultaat ergens aan toewijzen. Voor een beknoptere syntaxis zou je ook je for-lus kunnen vervangen door een one-liner: hello_no_spaces = map(lambda x: x.replace(' ', ''), hello)

Other episodes