Elenchi concatenati di stringhe in termini di elementi in Python


13

Questa è una domanda di per giocare a golf in .

Supponiamo di avere due elenchi di stringhe e di concatenare le voci corrispondenti da ciascun elenco. Ad esempio con a=list("abcd")e b=list("1234"), calcola ["a1","b2","c3","d4"].

Questo è banale nei linguaggi di programmazione basati su array, in cui le operazioni si applicano generalmente agli elenchi in modo membro. Ad esempio, nella mia lingua da golf Pip , il codice è semplicemente a.b. Ma in Python non è così facile.

Il modo Pythonic è probabilmente quello di usare zipe una comprensione della lista (25 caratteri):

[x+y for x,y in zip(a,b)]

Un altro metodo è mapcon una funzione lambda (23):

map(lambda x,y:x+y,a,b)

Quello che segue è il più breve che mi è venuto in mente (21):

map("".join,zip(a,b))

Esiste un metodo più breve?

Supponiamo che le liste abbiano la stessa lunghezza e che sia sufficiente una sorta di iterabile (quindi un mapoggetto va bene in Python 3).



@Mast L'elenco dei suggerimenti contiene una risposta che affronta questa domanda specifica?
Martin Ender,

@ MartinBüttner Se non lo è, dovrebbe. Previene l'ingombro e tiene tutti i trucchi, ecc.
Mast

Risposte:


14

20 caratteri

map(str.__add__,a,b)

Utilizza il metodo di aggiunta di stringhe del metodo incorporato __add__che viene invocato dalle +stringhe al posto della funzione anonima lambda x,y:x+y.


Sai, ci ho pensato str.__add__ma per qualche motivo non ho verificato se fosse più corto.
DLosc,

1
@DLosc il vero vantaggio di questa risposta è l'utilizzo mapdi più iterabili, che disattivano automaticamente la compressione. Senza quello non sarebbe più breve. Nota che se nel tuo codice devi accedere ad alcuni dei __*__metodi potrebbe essere più breve da fare from operator import *e quindi utilizzare map(add,a,b).
Bakuriu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.