Désolé si la question est un peu déroutante. C'est semblable à Cette question
Je pense que cela La question ci-dessus est proche de ce que je veux, mais à Clojure. P>
Il y a une autre question < / P>
J'ai besoin de quelque chose comme ça, mais au lieu de "[BR]" dans cette question, il existe une liste de chaînes qui doivent être recherchées et supprimées. P>
espoir que je me suis fait clairement. P>
Je pense que cela est dû au fait que les cordes de Python sont immuables. p>
J'ai une liste de mots de bruit qui doivent être supprimés d'une liste de chaînes. p>
Si j'utilise la compréhension de la liste, je finis à la recherche de la même chaîne encore et encore. Donc, seulement "de" est supprimé et non "le". Donc, ma liste modifiée ressemble à ceci p> J'aimerais savoir quant à l'erreur que je fais. P> p>
4 Réponses :
Voici mon poignard. Cela utilise des expressions régulières. sans update strong> p> Correction du bogue pointé par gnibbler (merci!): P> lambda code>: p>
pattern = re.compile("\\b(of|the|in|for|at)\\W", re.I)
phrases = ['of New York', 'of the New York', 'Spain has rain']
[pattern.sub("", phrase) for phrase in phrases] # ['New York', 'New York', 'Spain has rain']
Merci. Cela fonctionne de cette façon. J'ai pu comprendre le concept de Lambda plus clairement maintenant que j'ai eu la chance de mettre en œuvre cela.
Cela ne fonctionne pas correctement pour la phrase "L'Espagne a la pluie". Il est facile de corriger cependant
@Gnibbler: merci de le pointer. Je change ma réponse en conséquence.
J'ai ajouté le mot "max" dans le motif et, dans certains cas, il a supprimé le mot, dans d'autres cas, ce n'est pas le cas. C'est bizarre, quelqu'un devrait le tester pour voir s'ils obtiennent les mêmes résultats.
>>> import re >>> noise_words_list = ['of', 'the', 'in', 'for', 'at'] >>> phrases = ['of New York', 'of the New York'] >>> noise_re = re.compile('\\b(%s)\\W'%('|'.join(map(re.escape,noise_words_list))),re.I) >>> [noise_re.sub('',p) for p in phrases] ['New York', 'New York']
Wow! C'est une vraie façon de faire, bien que j'ai tendu mon cerveau. :-)
Cela ne semble pas obtenir chaque instance de mots. Par exemple, "de New York de" devient "New York de".
@Namey, vous pouvez utiliser quelque chose comme '\\ w? \\ b (% s) \\ w?' Code>. Sans l'OP fournissant un ensemble complet de tests, c'est un peu d'une balle-a-mole
Depuis que vous souhaitez savoir ce que vous faites de mal, cette ligne: a lieu, puis commence à boucler sur des mots. Il vérifie d'abord "de". Votre place (par exemple "de la New York") est vérifiée pour voir si elle commence par "de". Il est transformé (appeler pour remplacer et bander) et ajouté à la liste des résultats. La chose cruciale ici est que le résultat n'est plus jamais examiné. Pour chaque mot, vous iTERE dans la compréhension, un nouveau résultat est ajouté à la liste des résultats. Donc, le mot suivant est "The" et ta place ("de la New York") ne commence pas par "le", donc aucun nouveau résultat n'est ajouté. P> Je suppose que le résultat que vous avez fini par la concaténation de vos variables de votre place. Une version de procédure plus simple à lire et à comprendre serait (non testée): p> garder à l'esprit que remplacer () code> supprime le mot n'importe où dans le chaîne, même si cela se produit comme une simple sous-chaîne. Vous pouvez éviter cela en utilisant des regexes avec un modèle quelque chose comme
^ le \ b code>. P> p>
Merci. C'était très utile.
Sans Regexp, vous pouvez faire comme ça:
places = ['of New York', 'of the New York'] noise_words_set = {'of', 'the', 'at', 'for', 'in'} stuff = [' '.join(w for w in place.split() if w.lower() not in noise_words_set) for place in places ] print stuff
Je suis tombé sur ça et je n'avais aucune idée de ce qui se passe ici. Si quelqu'un trébuche à travers cela et me demande quelle magie se passe, sa compréhension de la liste appelée et c'est un bon article qui l'explique carlgoner.me/python/2011/11/09/...
Tu ne te fais pas clarifier; Indiquez votre question ici i>, puis mettez des liens vers des questions similaires avec des réponses similaires si vous pensez que cela est nécessaire ci-dessous.