2015-01-20 11 views
6

To musiało zostać zadane wcześniej, ale obawiam się, że nie mogę znaleźć odpowiedzi.Odpowiednik polecenia wklejania R dla wektora liczb w Pythonie

W R, mogę napisać

paste0('s', 1:10) 

która zwraca listę 10 znaków (string) zmiennych:

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

Jak mogę to zrobić po prostu w Pythonie? Jedyny sposób, jaki mogę wymyślić, to pętla for, ale musi istnieć prosta jedna linijka.

Próbowałem rzeczy jak

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

Odpowiedz

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

EDIT: range działa zarówno Python 2 i Python 3, ale w Pythonie 2 xrange jest nieco bardziej wydajny potencjalnie (jest to generator nie listy). Thansk @ytu

+0

Dzięki! Nie byłem pewien, czy przyjąć tę odpowiedź, czy @ jamylak. Oba wydają mi się miłe. – tsawallis

+0

Wygląda na to, że w Pythonie 3 nie ma funkcji 'xrange'. '[" s "+ str (i) dla i w zakresie (1,11)]' działa dobrze ale '[" s "+ str (i) dla i w xrange (1,11)]' daje _NameError: nazwa "xrange" nie jest zdefiniowana_. – ytu

5

Odpowiedź cdyson37 jest najbardziej pythonic; Oczywiście nadal możesz używać range, a nie xrange w twoim przypadku.

W python2, można również położyć większy nacisk na funkcjonalnym stylu z czymś jak:

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

Nie byłem pewien, czy przyjąć twoją odpowiedź, czy tę z @ cdyson37. Oba są ładne! – tsawallis

Powiązane problemy