2012-11-11 14 views
15

Zrobili niektóre przeszukiwania stosu Exchange odpowiedziało na pytania ale nie byli w stanie znaleźć to, czego szukam.Prepend ten sam ciąg do wszystkich pozycji na liście

Biorąc pod uwagę następującą listę:

a = [1, 2, 3, 4] 

Jak tworzę:

a = ['hello1', 'hello2', 'hello3', 'hello4'] 

Dzięki!

+1

Możesz edytować swój post umieścić w cudzysłowie smyczki? – Nicolas

+0

Przepraszam za to - wciąż bardzo świeże dla Pythona! –

Odpowiedz

32

Korzystając list comprehension:

['hello{0}'.format(i) for i in a] 

Lista rozumienie pozwala stosować wyrażenia do każdego elementu w sekwencji.

Demo:

>>> a = [1,2,3,4] 
>>> ['hello{0}'.format(i) for i in a] 
['hello1', 'hello2', 'hello3', 'hello4'] 
+0

o słodko! Dziękuję bardzo. Byłem pewien, że w Pythonie była użyteczna konstrukcja do robienia tego typu rzeczy. Odejdzie i przeczyta o sprawdzaniu listy. –

1

użyć list comprehension:

In [1]: a = [1,2,3,4] 

In [2]: ["hello" + str(x) for x in a] 
Out[2]: ['hello1', 'hello2', 'hello3', 'hello4'] 
+0

Czy jest to mniej więcej pythonic niż pierwsza odpowiedź? Uważam, że jest to trochę łatwiejsze do odczytania. Jest to zasadniczo takie samo, jak metoda formatowania pod maską? –

+2

nie może powiedzieć, czy to pythonic, ale wymaga konwersji '' string' int' do pierwszej, która może być łatwo obsługiwane przez 'formacie()', więc idź na formacie '()' odpowiedzi oparte. –

+0

Dzięki @AshwiniChaudhary. Bardzo pomocne. –

7

Jeszcze jedna opcja jest użycie built-in map function:

a = range(10) 
map(lambda x: 'hello%i' % x, a) 

Edit zgodnie komentarzu WolframH:

map('hello{0}'.format, a) 
+0

Dziękuję. Człowieku, tyle muszę się nauczyć. –

+0

(format 'hello {0}'., A) Zapraszamy –

+3

też użyć '' map, zwłaszcza jeśli nie wiesz, 'lambda' jeszcze. . Uwaga: w Pythonie 3.x 'map' nie zwraca' list' (ale inny iterable obiektu, który może być przekształcony w '' list' za pomocą list() ' – WolframH

Powiązane problemy