0
votes

Comment passer par une liste sans boucles

J'essaie d'aller au creux une liste appelée Message , c'est un mot simple et le codez.

J'ai aussi un dictionnaire appelé symbole_code_table , que A le code pour chaque lettre dans le mot.

quelque chose comme ceci: xxx

donc le résultat sera donc comme ceci: < pré> xxx

ci-dessous, je montre la fonction qui fait ce xxx je voulais savoir s'il y a une autre façon d'aller au travail sans avoir à Utilisez un pour boucle

Merci beaucoup à l'avance!


5 commentaires

Je ne vois pas comment tu pourrais faire ça sans utiliser de boucle


Votre code ne produit pas votre sortie rapportée, même si vous deviez retour / impression () le binaire_code . L'espace est manquant.


La seule façon de le faire sans une boucle est d'a) écrire chaque opération effectuée dans votre ligne de boucle par ligne, ou b) Vectorisez Votre code.


@Roadrunner Il n'est pas clair si la question est "Comment puis-je accomplir cela sans le pour dans : syntaxe?" ou "Comment puis-je accomplir cela sans répéter sur la liste?" Ma réponse ci-dessous aborde le premier pendant que vous le lisez comme la seconde.


Si vous ne vous souciez pas des espaces, vous pouvez écrire: message.translate (str.maketrans (symbole_code_table)) .


4 Réponses :


0
votes

Je voulais savoir s'il y a une autre façon d'aller à la crosse le message sans avoir à utiliser une boucle.

Vous pouvez utiliser une compréhension de liste à la place: xxx

Notez que c'est toujours une boucle. En d'autres termes, il n'est pas plus efficace de courir. La syntaxe est juste beaucoup plus concise.


4 commentaires

Je pense que cette réponse ne répond pas à la question réelle


@Adambajger pourquoi pas?


Parce que la question était, s'il y a un moyen d'éviter de boucle. Vous avez suggéré une boucle comme une solution.


@Adambajger, je suis désolé ... Où est la boucle de ma réponse? Il existe une compréhension de la liste, qui est une structure en boucle, mais ce n'est pas une boucle. De plus, la mise en garde à la fin de ma réponse clarifie cette distinction.



0
votes

Généralement je dirais non. Vous devez visiter chaque élément au moins une fois pour le coder, ce qui conduit toujours à une forme de A pour la boucle, aussi bien que vous l'écrivez.

Si vous en avez besoin uniquement pour éviter le mot-clé "pour" dans le code Python, utilisez la récursion de la queue.

Si vous recherchez une vitesse d'accélération, vous pouvez diviser le message en morceaux, les coder dans des threads parallèles, puis rejoindre les résultats dans la commande correcte pour obtenir le message encodé complet.


0 commentaires

3
votes

Vous pouvez certainement avec le paradigme fonctionnel, voici ici à l'aide de mappe : xxx


5 commentaires

Veuillez corriger votre code avec " ou ', au lieu de " . Sinon, c'est probablement ce que la réponse acceptée devrait être,


Vous devriez probablement noter que cela boucle toujours sur message . Il est juste caché dans la fonction mappe () .


@ Norok2 En effet, j'ai remarqué que cela aussi, mais je ne trouve pas un moyen facile de le faire d'un iPhone: /


@ Code-Apprentice: Je pense qu'il est évident qu'une sorte d'itération est requise. La question, cependant, demande spécifiquement sur "pour les boucles", pas "aucune boucle de quelque nature que ce soit" :)


@smassey vous et moi pensons tous les deux que l'itération ici est évidente, mais les futurs visiteurs ne peuvent pas. La question est ambiguë sur cette distinction. Le titre dit "Sans boucles" pendant que le corps dit "sans avoir à utiliser une boucle". Je pense qu'il est important de clarifier que, tandis que mapper () n'est pas un explicite de la boucle , c'est toujours une boucle.



2
votes

Ma solution:

binaire_code = ''Join (liste (carte (Lambda s: symbol_code_table.get.get (s), message)))


0 commentaires