2017-07-17 2 views
0

Ich versuche, das Verständnis der unteren Liste rückwärts zu konstruieren, aber mein Versuch generiert nur 1 Karte. Was vermisse ich?Reverse Engineering eine einfache Liste Verständnis zu seiner regulären Form

ranks = [_ for _ in range(2, 11)] + ['JACK', 'QUEEN', 'KING', 'ACE'] 
suits = ['SPADE', 'HEART ', 'DIAMOND', 'CLUB'] 

def get_deck(): 
    return [[rank, suit] for rank in ranks for suit in suits] 

Mein Versuch:

def get_deck(): 
    for rank in ranks: 
     for suit in suits: 
      return [rank, suit] 
+0

Was meinen Sie mit * Reverse *? –

+0

Was meinst du damit, das Listenverständnis umzukehren? Meinen Sie, eine Liste mit einem Listenverständnis umzukehren? – Carcigenicate

+0

'return' * returns * control zurück zum Aufrufer, was offensichtlich nach der ersten Iteration passiert. –

Antwort

3

return bedeutet, dass man Ende den Codepfad dieser Funktion, und gegebenenfalls, dass Sie einen einzigen Wert (der Wert kann natürlich ein Tupel sein, so dass man mehrere Werte durch einen Wert zurückgeben kann) zurückzukehren.

Wenn Sie eine Generatorfunktion schreiben wollen, yield ist dein Freund:

def get_deck(): 
    for rank in ranks: 
     for suit in suits: 
      yield [rank, suit]

Wenn wir jetzt die Funktion aufrufen, werden wir einen Generator Objekt erhalten:

>>> get_deck() 
<generator object get_deck at 0x7f4458438ca8> 

Wenn Sie Möchten Sie eine Liste basierend auf dem Generator generieren, können Sie list(..) auf das Ergebnis der get_deck() Funktion aufrufen:

>>> list(get_deck()) 
[[2, 'SPADE'], [2, 'HEART '], [2, 'DIAMOND'], [2, 'CLUB'], [3, 'SPADE'], [3, 'HEART '], [3, 'DIAMOND'], [3, 'CLUB'], [4, 'SPADE'], [4, 'HEART '], [4, 'DIAMOND'], [4, 'CLUB'], [5, 'SPADE'], [5, 'HEART '], [5, 'DIAMOND'], [5, 'CLUB'], [6, 'SPADE'], [6, 'HEART '], [6, 'DIAMOND'], [6, 'CLUB'], [7, 'SPADE'], [7, 'HEART '], [7, 'DIAMOND'], [7, 'CLUB'], [8, 'SPADE'], [8, 'HEART '], [8, 'DIAMOND'], [8, 'CLUB'], [9, 'SPADE'], [9, 'HEART '], [9, 'DIAMOND'], [9, 'CLUB'], [10, 'SPADE'], [10, 'HEART '], [10, 'DIAMOND'], [10, 'CLUB'], ['JACK', 'SPADE'], ['JACK', 'HEART '], ['JACK', 'DIAMOND'], ['JACK', 'CLUB'], ['QUEEN', 'SPADE'], ['QUEEN', 'HEART '], ['QUEEN', 'DIAMOND'], ['QUEEN', 'CLUB'], ['KING', 'SPADE'], ['KING', 'HEART '], ['KING', 'DIAMOND'], ['KING', 'CLUB'], ['ACE', 'SPADE'], ['ACE', 'HEART '], ['ACE', 'DIAMOND'], ['ACE', 'CLUB']] 

Sie können auch gebaut eine Liste in der get_deck Funktion, wie:

def get_deck(): 
    result = [] 
    for rank in ranks: 
     for suit in suits: 
      result.append([rank,suit]) 
    return result
0

Sie können eine Liste rückgängig machen, indem [::-1] zum Ende hinzufügen. So können Sie Ihr Listenverständnis nachvollziehen und es dann umkehren. Oder rufen Sie einfach reversed in der Liste an.