2016-12-11 1 views
0

Ich versuche, alle möglichen Kombinationen von Poker-Karten zu erstellen. Also, ich lief:Erstellen Sie alle möglichen Karten mit itertools und zip

import itertools as it 
ranks = (2,3,4,5,6,7,8,9,10,'Jack','Queen','King','Ace') 
suits = ('Spades', 'Clubs', 'Hearts', 'Diamonds') 
for i in zip(ranks, it.repeat(suits, 14)): 
    print(i) 

Und bekam:

(2, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(3, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(4, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(5, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(6, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(7, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(8, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(9, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
(10, ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
('Jack', ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
('Queen', ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
('King', ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 
('Ace', ('Spades', 'Clubs', 'Hearts', 'Diamonds')) 

Was wäre ein effizienter Weg sein ['2 of Spades', '2 of Clubs', '2 of Hearts', ...] aus dieser Liste von Tupeln zu bekommen?

Meine aktuelle Methode ist:

cards = [] 
for card in zip(ranks, it.repeat(suits, 14)): 
    rank, suits = card 
    for suit in suits: 
     cards.append("{} of {}".format(rank, suit)) 

Gibt es einen besseren Weg, dies zu tun? Was ist es?

+5

'it.product (Anzüge, Ränge)'? – jonrsharpe

+0

@jonrsharpe Danke! – rassar

+0

@rassar aber das ist nicht effizienter als dein Weg ... –

Antwort

3

Ich denke, dass Sie itertools dafür nicht brauchen. List Verständnis wird gut funktionieren:

cards = [ "{} of {}".format(r, s) for r in ranks for s in suits ] 
+0

Wahr. Aber gibt es einen effizienteren Weg? – rassar

+1

@rassar Mit "effizienter" meinen Sie kompakter Code? Weil ich nicht denke, dass es eine effizientere Lösung gibt. –

Verwandte Themen