95 votes

Comment diviser les éléments d'une liste ?

J'ai une liste :

my_list = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']

Comment puis-je supprimer le \t et tout ce qui suit pour obtenir ce résultat :

['element1', 'element2', 'element3']

133voto

Roman Bodnarchuk Points 12136

Quelque chose comme :

>>> l = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']
>>> [i.split('\t', 1)[0] for i in l]
['element1', 'element2', 'element3']

2 votes

Je comprends presque cela. Que fait le 1 dans l'argument de split ? De même pour ce que je suppose être l'indice 0 après les parenthèses. Est-ce que cela crée une nouvelle liste en utilisant l'élément zéro de ce qui était i ? Alors, le 1 n'est qu'un autre split, se débarrassant effectivement du reste de la chaîne comme le voulait le PO ?

2 votes

Puisque la liste contient des chaînes de caractères, la variable i est une chaîne de caractères. Donc i.split(' \t ', 1) appelle la méthode split() des chaînes de caractères. Selon la norme documentation Le premier paramètre de cette méthode est la chaîne de caractères à diviser et le second est le nombre maximal de divisions à effectuer. La méthode renvoie la liste des chaînes de caractères résultant de la division, de sorte que "[0]" renvoie la première chaîne de caractères divisée dans la liste de résultats.

2 votes

Lorsque j'ai essayé cette méthode pour mon propre code, j'ai reçu un message d'erreur indiquant que l'objet "list" n'avait pas d'attribut "split". Je ne sais pas comment contourner ce problème.

39voto

dave Points 4605
myList = [i.split('\t')[0] for i in myList]

10voto

caltangelo Points 254

Essayez d'itérer à travers chaque élément de la liste, puis divisez-la au niveau du caractère de tabulation et ajoutez-la à une nouvelle liste.

for i in list:
    newList.append(i.split('\t')[0])

5 votes

Cela fonctionne, mais les compréhensions de listes sont un bien meilleur moyen de le faire.

7voto

Artsiom Rudzenka Points 9771

N'utilisez pas list comme nom de variable. Vous pouvez également jeter un coup d'œil au code suivant :

clist = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847', 'element5']
clist = [x[:x.index('\t')] if '\t' in x else x for x in clist]

Ou l'édition sur place :

for i,x in enumerate(clist):
    if '\t' in x:
        clist[i] = x[:x.index('\t')]

2voto

Max Kleiner Points 39

J'ai dû diviser une liste pour l'extraction de caractéristiques en deux parties : lt, lc :

ltexts = ((df4.ix[0:,[3,7]]).values).tolist()
random.shuffle(ltexts)

featsets = [(act_features((lt)),lc) 
              for lc, lt in ltexts]

def act_features(atext):
  features = {}
  for word in nltk.word_tokenize(atext):
     features['cont({})'.format(word.lower())]=True
  return features

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X