Ich habe ein kleines Problem mit der Liste. Ich habe also eine Liste namens l
:
l = ['Facebook;Google+;MySpace', 'Apple;Android']
Und wie Sie sehen, habe ich nur 2 Zeichenketten in meiner Liste. Ich möchte meine Liste l
durch ';' und füge meine neuen 5 Zeichenketten in eine neue Liste mit dem Namen l1
ein.
Wie kann ich das machen?
Und ich habe auch versucht, das so zu machen:
l1 = l.strip().split(';')
Aber Python gibt mir einen Fehler:
AttributeError: 'list' object has no attribute 'strip'
Wenn also das Objekt "list" kein Attribut "strip" oder "split" hat, wie kann ich eine Liste aufteilen?
Vielen Dank
strip()
ist eine Methode für Strings, Sie rufen sie mit einer list
auf, daher der Fehler.
>>> 'strip' in dir(str)
True
>>> 'strip' in dir(list)
False
Um zu tun, was Sie wollen, tun Sie es einfach
>>> l = ['Facebook;Google+;MySpace', 'Apple;Android']
>>> l1 = [elem.strip().split(';') for elem in l]
>>> print l1
[['Facebook', 'Google+', 'MySpace'], ['Apple', 'Android']]
Da Sie möchten, dass sich die Elemente in einer einzelnen Liste befinden (und nicht in einer Liste von Listen), haben Sie zwei Möglichkeiten.
Um das erste zu tun, folgen Sie dem Code:
>>> l1 = []
>>> for elem in l:
l1.extend(elem.strip().split(';'))
>>> l1
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
Um das zweite zu tun, benutze 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']
Dies sollte das sein, was Sie wollen:
[x for y in l for x in y.split(";")]
ausgabe:
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
Was Sie wollen, ist -
strtemp = ";".join(l)
Die erste Zeile fügt einen ;
an das Ende von MySpace
an, so dass beim Aufteilen keine MySpaceApple
.__ ausgegeben wird. Dadurch wird l zu einer Zeichenfolge verbunden.
l1 = strtemp.split(";")
Das funktioniert, weil strtemp eine Zeichenfolge mit .split () ist.
Hoffe das hilft :)
>>> 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']
>>>
Eine mögliche Lösung, die ich im Moment ausprobiert habe, ist:
>>> 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']
Sie teilen den String-Eintrag der Liste auf. l [0] .strip ()
Teilen Sie die Zeichenfolgen auf und kombinieren Sie sie dann mit chain.from_iterable zu einer einzigen Liste
>>> 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']