2013-04-01 18 views
10

Załóżmy, że mam listę garnitury kart następująco:dodać znak na każdej pozycji na liście

suits = ["h","c", "d", "s"]

i chcę dodać typ karty na każdym kolorze, tak że mój wynik jest coś takiego jak

aces = ["ah","ac", "ad", "as"]

to istnieje prosty sposób to zrobić bez odtworzyć całkowicie nową listę i stosując for pętlę?

+1

Możliwy duplikat [Dołączanie tego samego ciągu do listy ciągów w Pythonie] (https://stackoverflow.com/questions/ 2050637/dołączanie-the-same-string-to-a-List-of-ciągi-in-python) –

Odpowiedz

20

To musiałaby być 'najłatwiejszy' sposób

>>> suits = ["h","c", "d", "s"] 
>>> aces = ["a" + suit for suit in suits] 
>>> aces 
['ah', 'ac', 'ad', 'as'] 
+0

niesamowite, dziękuję – fox

+1

też, 'listy ('a' + pozew o kolorze w garniturach)' –

+0

@BurhanKhalid ile z jakiegoś powodu potrzebujesz "krotki" np. 'tuple (" a "+ garnitur w garniturach)'. Zdecydowanie nie użyłbym tego dla list. – jamylak

4

Inną alternatywą, funkcja map:

aces = map((lambda x: 'a' + x), suits) 
+3

Lista komp jest zwykle * * korzystne, gdy trzeba mieć 'lambda's twojej mapie, w którym to przypadku są one również szybsze – jamylak

+0

Dzięki za Wskazówka! – ylabidi

+0

'[s dla s w garniturach]' jest sprzeczne z intuicją. Po prostu będziecie rekonstruować tę samą listę. Zostaw go, jak to było wcześniej;) – jamylak

1

Jeśli chcesz dodać coś innego niż zawsze 'a' można spróbować to też:

foo = ['h','c', 'd', 's'] 
bar = ['a','b','c','d'] 
baz = [x+y for x, y in zip(foo, bar)] 
>>> ['ha', 'cb', 'dc', 'sd'] 
+2

' '' .join ([x, y])' '== x + y' – jamylak

+0

wow. Teraz czuję się głupio. dzięki! – bobrobbob

Powiązane problemy