Python 2: AttributeError: ‘list’ object heeft geen attribuut ‘strip’

Ik heb een klein probleem met de lijst. Dus ik heb een lijst met de naam l:

l = ['Facebook;Google+;MySpace', 'Apple;Android']

En zoals je kunt zien heb ik maar 2 strings in mijn lijst. Ik wil mijn lijst lscheiden door ‘;’en mijn nieuwe 5 strings in een nieuwe lijst plaatsen met de naam l1.

Hoe kan ik dat doen?

En ik heb ook geprobeerd om dit als volgt te doen:

l1 = l.strip().split(';')

Maar Python geeft me een foutmelding:

AttributeError: 'list' object has no attribute 'strip'

Dus als het ‘list’-object geen attribuut ‘strip’ of ‘split’ heeft, hoe kan ik dan een lijst splitsen?

Bedankt


Antwoord 1, autoriteit 100%

strip()is een methode voor strings , je roept het op een list, vandaar de fout.

>>> 'strip' in dir(str)
True
>>> 'strip' in dir(list)
False

Doe gewoon wat je wilt

>>> l = ['Facebook;Google+;MySpace', 'Apple;Android']
>>> l1 = [elem.strip().split(';') for elem in l]
>>> print l1
[['Facebook', 'Google+', 'MySpace'], ['Apple', 'Android']]

Omdat je wilt dat de elementen in één lijst staan (en niet in een lijst met lijsten), heb je twee opties.

  1. Maak een lege lijst en voeg er elementen aan toe.
  2. Maak de lijst plat.

Om de eerste te doen, volg je de code:

>>> l1 = []
>>> for elem in l:
        l1.extend(elem.strip().split(';'))  
>>> l1
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']

Gebruik voor het tweede gebruik itertools.chain

>>> l1 = [elem.strip().split(';') for elem in l]
>>> print l1
[['Facebook', 'Google+', 'MySpace'], ['Apple', 'Android']]
>>> from itertools import chain
>>> list(chain(*l1))
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']

Antwoord 2, autoriteit 17%

Wat u wilt doen is –

strtemp = ";".join(l)

De eerste regel voegt een ;toe aan het einde van MySpacezodat tijdens het splitsen geen MySpaceApplewordt weergegeven
Dit voegt l samen tot één string en dan kun je gewoon-

l1 = strtemp.split(";")

Dit werkt omdat strtemp een string is met .split()


Antwoord 3, autoriteit 9%

Dit zou moeten zijn wat je wilt:

[x for y in l for x in y.split(";")]

uitvoer:

['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']

Antwoord 4, autoriteit 9%

Hopelijk helpt dit 🙂

>>> x = [i.split(";") for i in l]
>>> x
[['Facebook', 'Google+', 'MySpace'], ['Apple', 'Android']]
>>> z = [j for i in x for j in i]
>>> z
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
>>> 

Antwoord 5, autoriteit 4%

Een mogelijke oplossing die ik nu heb geprobeerd is:
(Zorg ervoor dat u het op een algemene manier doet met for, while with index)

>>> l=['Facebook;Google+;MySpace', 'Apple;Android']
>>> new1 = l[0].split(';')
>>> new1
['Facebook', 'Google+', 'MySpace']
>>> new2= l[1].split(';')`enter code here`
>>> new2
['Apple', 'Android']
>>> totalnew = new1 + new2
>>> totalnew
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']

Antwoord 6

U splitst de tekenreeksinvoer van de lijst. l[0].strip()


Antwoord 7

Verdeel de strings en gebruik vervolgens chain.from_iterableom combineer ze in een enkele lijst

>>> import itertools
>>> l = ['Facebook;Google+;MySpace', 'Apple;Android']
>>> l1 = [ x for x in itertools.chain.from_iterable( x.split(';') for x in l ) ]
>>> l1
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']

Antwoord 8

U kunt de strings in de lijst eerst samenvoegen met het scheidingsteken ‘;’ gebruik de functie joinen gebruik vervolgens de functie splitom de lijst te maken:

l = ['Facebook;Google+;MySpace', 'Apple;Android']
l1 = ";".join(l)).split(";")  
print l1

uitgangen

[‘Facebook’, ‘Google+’, ‘MySpace’, ‘Apple’, ‘Android’]

Other episodes