web-dev-qa-db-fra.com

Python 2: AttributeError: l'objet 'list' n'a pas d'attribut 'strip'

J'ai un petit problème avec la liste. J'ai donc une liste appelée l:

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

Et comme vous pouvez le constater, il n’ya que 2 chaînes dans ma liste. Je veux séparer ma liste l par ';' et mets mes nouvelles 5 chaînes dans une nouvelle liste appelée l1.

Comment puis je faire ça?

Et aussi j'ai essayé de faire ça comme ça:

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

Mais Python me donne une erreur:

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

Donc, si l'objet 'list' n'a pas d'attribut 'strip' ou 'split', comment puis-je scinder une liste?

Merci

8
Michael

strip() est une méthode pour les chaînes, vous l'appelez sur une list, d'où l'erreur.

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

Pour faire ce que tu veux, fais juste

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

Puisque vous voulez que les éléments fassent partie d’une seule liste (et non d’une liste de listes), vous avez deux options.

  1. Créez une liste vide et ajoutez-y des éléments.
  2. Aplatir la liste.

Pour faire le premier, suivez le code:

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

Pour faire la seconde, utilisez 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

Cela devrait être ce que vous voulez:

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

sortie:

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

Ce que tu veux faire c'est - 

strtemp = ";".join(l)

La première ligne ajoute un ; à la fin de MySpace de telle sorte que lors de la scission, elle ne donne pas MySpaceApple 

l1 = strtemp.split(";")

Cela fonctionne car strtemp est une chaîne qui a .split ()

2
svineet

J'espère que cela t'aides :)

>>> 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

Une solution possible que j’ai essayée à l’heure actuelle est la suivante:

>>> 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

Vous divisez l'entrée de chaîne de la liste. l [0] .strip ()

0
Jiminion

Fractionnez les chaînes puis utilisez chain.fromiterable pour les combiner en une seule 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