2015-01-20 14 views
6

Questo deve essere stato chiesto prima, ma temo di non riuscire a trovare la risposta.Equivalente del comando incolla di R per il vettore di numeri in Python

In R, posso scrivere

paste0('s', 1:10) 

che restituisce un elenco di 10 caratteri variabili (stringa):

[1] "s1" "s2" "s3" "s4" "s5" "s6" "s7" "s8" "s9" "s10" 

Come faccio a fare questo semplicemente in Python? L'unico modo in cui riesco a pensare è con un ciclo for, ma deve esserci un semplice liner.

cose che ho provato come

's' + str(np.arange(10)) 
['s', str(np.arange(10))] 

risposta

12
>>> ["s" + str(i) for i in xrange(1,11)] 
['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9', 's10'] 

EDIT: range funziona sia in Python 2 e Python 3, ma in Python 2 xrange è un po 'più efficiente potenzialmente (si tratta di un generatore non una lista). Thansk @ytu

+0

Grazie! Non ero sicuro di accettare questa risposta o quella di @ jamylak. Entrambi sembrano simpatici per me. – tsawallis

+0

Sembra che in Python 3 non ci sia la funzione 'xrange'. '[" s "+ str (i) per i in range (1,11)]' funziona bene ma '[" s "+ str (i) per i in xrange (1,11)]' fornisce un _NameError: il nome 'xrange' non è definito_. – ytu

5

La risposta di cdyson37 è la più poderosa; ovviamente puoi ancora usare range anziché xrange nel tuo caso.

In python2, si può anche mettere maggiormente l'accento sulla stile funzionale, con qualcosa di simile:

map(lambda x: "s"+str(x), range(1,11)) 
5
>>> map('s{}'.format, range(1, 11)) 
['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9', 's10'] 
+0

Non ero sicuro se accettare la tua risposta o quella da @ cdyson37. Entrambi sono belli! – tsawallis

Problemi correlati