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
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.
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']
Cela devrait être ce que vous voulez:
[x for y in l for x in y.split(";")]
sortie:
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
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 ()
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']
>>>
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']
Vous divisez l'entrée de chaîne de la liste. l [0] .strip ()
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']