簡體   English   中英

嵌套for循環的列表理解

[英]List comprehension for nested for loops

我正在創建一個簡單的紙牌游戲,並決定嘗試實現列表理解。 我真的不知道如何解決這個問題,因為我只處理了1個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循環,我希望將其放入列表推導中。 有任何想法嗎?

使用嵌套循環,您可以將理解寫為:

[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 ,因此理解並不是太麻煩。 如果您願意,可以將其作為常數。

當然。 最巧妙的方法將利用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
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM