Ceci est une question de conseils pour jouer au golf en python .
Supposons que vous ayez deux listes de chaînes et que vous souhaitiez concaténer les entrées correspondantes de chaque liste. Par exemple avec a=list("abcd")
et b=list("1234")
, calculez ["a1","b2","c3","d4"]
.
Ceci est trivial dans les langages de programmation basés sur des tableaux, où les opérations s'appliquent généralement par membre aux listes. Par exemple, dans ma langue de golf Pip , le code est simple a.b
. Mais en Python, ce n'est pas si facile.
La façon Pythonique est probablement d'utiliser zip
et une liste de compréhension (25 caractères):
[x+y for x,y in zip(a,b)]
Une autre méthode consiste map
à utiliser une fonction lambda (23):
map(lambda x,y:x+y,a,b)
Ce qui suit est le plus court que j'ai trouvé (21):
map("".join,zip(a,b))
Existe-t-il une méthode plus courte?
Supposons que les listes soient de la même longueur et qu'une sorte d'itérable soit tout ce qui est nécessaire (donc un map
objet va bien en Python 3).
Réponses:
20 caractères
Utilise la méthode d'ajout de chaîne de la méthode intégrée
__add__
qui est invoquée par+
on on strings à la place de votre fonction anonymelambda x,y:x+y
.la source
str.__add__
mais pour une raison quelconque , je n'ai pas vérifié si c'était plus court.map
avec plusieurs itérables, ce qui désactive automatiquement la fermeture éclair. Sans cela, ce ne serait pas plus court. Notez que si dans votre code vous devez accéder à certaines des__*__
méthodes, il peut être plus court à fairefrom operator import *
, puis à utilisermap(add,a,b)
.