如何使用上一个列表中的所有匹配项创建新的字符串列表?

时间:2015-08-18 19:48:19

标签: python string list python-3.x multiplication

我正在尝试在python中创建一个基本的二十一点游戏,我想创建一个名为Deck的新列表。我希望Deck在一个列表中拥有所有可能的套装/等级配对(即心脏的王牌,心脏的2,心脏的3等),这样我就可以在random.shuffle中开始“交易”或.pop风格。

如何将这两个列表配对或者我必须自己输入?

以下是当前代码:

print ("Welcome to the Blackjack Table! May I have your name?")
user_name = input("Please enter your name:")
print ("Welcome to the table {}. Let's deal!".format(user_name))
import random

suits = ["Heart", "Diamond", "Spade", "Club"]
ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
values = {'A':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, '10':10, 'J':10, 'Q':10, 'K':10,}

deck = 

2 个答案:

答案 0 :(得分:2)

使用嵌套list comprehension将每个等级与每个套装配对。

deck = [(rank, suit) for rank in ranks for suit in suits]

itertools.product可以用来完成同样的事情:

import itertools
deck = list(itertools.product(ranks, suits))

答案 1 :(得分:1)

所以你要做的就是拿出每件套装并将它与每个等级配对。下面的代码与两个嵌套的for loops完全相同:

deck = []  # create an empty list
for suit in suits: 
    for rank in ranks:
        deck.append((suit, rank))  # append a tuple to the list
print len(deck)  # prints 52, as expected

更加pythonic的方式是使用list comprehension。它的速度要快一点,但可能更少(或更直观)。

deck = [(suit, rank) for suit in suits for rank in ranks]