嵌套for循环的列表理解

时间:2018-02-23 10:02:19

标签: python python-3.x list-comprehension

我正在创建一个简单的纸牌游戏,并决定很好地实现列表理解。我真的不知道如何处理这个因为我只处理了1 for for循环。

def __init__(self):
    self.cards = []  

    for suit in range(1, 5):  

        for value in range(2, 11):  
            self.cards.append(Card(value, suit))  

        for value in ['Ace', 'King', 'Queen', 'Jack']:  
            self.cards.append(Card(value, suit))  

如果可能的话,这是我希望可能放入列表解析的嵌套for循环。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用嵌套循环,您可以将理解编写为:

[expression for x in x_values for y in y_values]

这样的事情:

def __init__(self):
    values = list(range(2,11)) + ['Ace', 'King', 'Queen', 'Jack']
    self.cards = [Card(value, suit) for suit in range(1,5) for value in values]

我将values设置在一个单独的行中,因此理解力不是太笨重。如果你这么倾向的话,你可以把它作为常数放在其他地方。

答案 1 :(得分:1)

不确定。最好的方法是利用itertools.chain,所以首先:

from itertools import chain

然后简单地说:

def __init__(self):
    self.cards = [
        Card(value, suit)
        for suit in range(1, 5)
        for value in chain(range(2, 11), ['Ace', 'King', 'Queen', 'Jack'])
    ]

甚至没有itertools

num_vals = range(2, 11)
face_vals = ['Ace', 'King', 'Queen', 'Jack']
self.cards = [
    Card(value, suit))
    for suit in range(1, 5)
    for values in (num_vals, face_vals)
    for value in values
]