Je suis coincé sur ce défi de codage de Codewars:
"Implémentez la fonction unique_in_order qui prend comme argument une séquence et retourne une liste d'éléments sans aucun élément de la même valeur et préservant l'ordre d'origine de éléments. " p>
" Par exemple: p> " p> C'est à quelle distance je pouvais venir jusqu'à présent: < / p> qui me fait une sortie de: p> pour l'entrée suivante: p> au lieu de la sortie souhaitée de: p> J'apprécie votre aide. p> p>
6 Réponses :
Premièrement, créez l'entrée et une liste qui va trouver votre résultat: p> maintenant, ce que nous ferons est de boucler sur le mot, et chaque Nouvelle lettre que nous appendons. Nous devons donc suivre ce que la lettre "actuelle" est la suivante: p> Au début, nous l'avons défini sur aucun parce que nous n'avons pas encore de lettre actuelle. Maintenant, nous avons une boucle sur le mot: p> définir code> crée un objet avec chaque élément de la liste uniquement une fois. Au lieu d'une fonction intégrée, vous allez devoir écrire quelque chose vous-même. Comment faire cela?
Vous pouvez essayer cela.
itérer à travers la chaîne. Chaque fois que ith em> élément et ith + 1 em> ne correspond pas à l'élément em> à la liste `res. P>
iTERTOOLS.GROUPBY ( ) code> peut être utilisé ici. P> from itertools import groupby
def unique_order(_iter):
return [k for k, g in groupby(_iter)] #'AAAABBBCCDAABBB'--> ['A', 'B', 'C', 'D', 'A', 'B']
Le moyen le plus simple serait de le faire:
>>> string = "AAAABBBCCDAABBB" >>> new_list = [] >>> for i in string: ... if not new_list: ... new_list.append(i) ... elif new_list[-1] != i: ... new_list.append(i) ... >>> new_list ['A', 'B', 'C', 'D', 'A', 'B']
Vous devez utiliser itheroTools.groupby code>. Le comportement que vous voulez est identique à la commande uniq code>. Comme le Doc dit, groupby code> a Un aussi semblable à Behviour. >>> import itertools
>>> [k for k, _ in itertools.groupby('AAAABBBCCDAABBB')]
['A', 'B', 'C', 'D', 'A', 'B']
>>>
Vous pouvez le faire facilement avec une compréhension de la liste à l'aide de zip code> et de la découpage nifty. C'est fondamentalement la recette par paire sans utiliser iTerTools. Si vous voulez que vous puissiez regarder cette recette si vous en avez besoin aussi. result = [it[0]]
for c, nc in zip(iterable, iterable[1:]):
if c != nc:
result.append(nc)
def unique_in_order(iterable):
output = []
letter = None
for current in iterable:
if current != letter:
output.append(current)
letter = current
return output
SET () code> renvoie des éléments uniques dans la liste donnée@Elsheikh, ça ne sauvera pas la commande
Set commandé préserve la commande
Utilisation de l'ensemble n'est pas ce que vous devez faire ici, la fonction ne veut pas que les éléments uniques, il veut essentiellement
[k pour k, _ in iteroTools.groupby (itérêtant)] code>@Olvinroght je sais, je l'informe juste avec ce que
défini () code> fait