webentwicklung-frage-antwort-db.com.de

Python 2: AttributeError: 'list'-Objekt hat kein Attribut' strip '

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

8
Michael

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.

  1. Erstellen Sie eine leere Liste und fügen Sie Elemente hinzu.
  2. Glätten Sie die Liste.

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']
16
Sukrit Kalra

Dies sollte das sein, was Sie wollen:

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

ausgabe:

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

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.

2
svineet

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']
>>> 
2
Pawel Miech

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']
1
Ana Salinas

Sie teilen den String-Eintrag der Liste auf. l [0] .strip ()

0
Jiminion

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']
0
ersran9