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 l
scheiden 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.
- Maak een lege lijst en voeg er elementen aan toe.
- 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 MySpace
zodat tijdens het splitsen geen MySpaceApple
wordt 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 join
en gebruik vervolgens de functie split
om de lijst te maken:
l = ['Facebook;Google+;MySpace', 'Apple;Android']
l1 = ";".join(l)).split(";")
print l1
uitgangen
[‘Facebook’, ‘Google+’, ‘MySpace’, ‘Apple’, ‘Android’]