0
votes

Comment transformer une liste de bigrammes en une liste de jetons en utilisant Python

Je veux transformer une liste de bigrammes en une liste de jetons utilisant Python 3.6.

J'ai quelque chose comme:

output_list = [‘hi’, ‘my’, ‘name’, ‘is’, ‘x’]

Je veux transformer ceci en:

input_list = [(‘hi’, ‘my’), (‘my’, ‘name’), (‘name’, ‘is’), (‘is’, ‘x’)]


2 commentaires

Qu'avez-vous essayé et quel est exactement le problème?


Je recommanderais un didacticiel Python: sopython.com/wiki/What_tutorial_should_I_read%3F


3 Réponses :


1
votes

Vous pouvez commencer par utiliser une compréhension de liste pour aplatir la liste, puis en prendre un ensemble:

flat_list = [x for sublist in input_list for x in sublist]
output_list = set(flat_list)
output_list

{'hi', 'is', 'my', 'name', 'x'}


0 commentaires

0
votes

Si toutes les entrées suivent cette structure, j'extraireais la première partie du premier tuple , puis le dernier élément de chaque tuple , c'est-à-dire:

input_list = [("hi", "my"), ("my", "name"), ("name", "is"), ("is", "x")]
output_list = [input_list[0][0]]+[i[-1] for i in input_list]
print(output_list) # ['hi', 'my', 'name', 'is', 'x']

J'ai utilisé les fonctionnalités python suivies:

  • indexation, [0] [0] signifie premier élément du premier élément (si ce n'est pas clair, je suggère de rechercher d'abord imbrication ), [- 1] signifie le dernier élément (premier élément à partir de la fin)
  • compréhension de liste, pour obtenir le dernier élément de chaque élément de la liste
  • concaténation de liste (indiquée par + ) pour "coller" deux listes s ensemble


0 commentaires

0
votes

Si vous ne souhaitez pas créer une liste séparée pour stocker les valeurs aplaties, économiser de l'espace et éviter les boucles, vous pouvez essayer ceci:

from itertools import chain
lst = [('hi', 'my'), ('my', 'name'), ('name', 'is'), ('is', 'x')]
flattened = chain(*lst)
elems = list(dict.fromkeys(flattened).keys())
print(elems)

Ici chain (* lst) décompresse essentiellement les éléments et aplatit la liste, et la stocke dans un objet itérateur, par opposition à un stockage réel sous forme de liste. Ensuite, vous pouvez les convertir en set et back, mais ils peuvent perturber la commande. Donc, vous prenez toutes ces valeurs et essayez de les convertir en clés de dictionnaire. Comme les dictionnaires ne peuvent pas avoir de clés en double, il ne prendra que les éléments uniques. Donc, si vous prenez les clés de ce dict, vous obtiendrez les éléments uniques de la liste aplatie. REMARQUE: la commande est garantie à partir de Python 3.7.


0 commentaires