簡體   English   中英

如何經歷嵌套的for循環?

[英]How to go through a nested for loop?

您好,我試圖使我的代碼經過嵌套的for循環,但是循環拒絕遵循我最初的思想構造。

我的代碼如下所示。

def couple(men_choice, women_choice):

possible_engagements = []

# men's first choice
for man in range(len(men_choice)):
    for woman in men_choice:
        pair = (man, woman[0])
        possible_engagements.append(pair)
    return possible_engagements

我正在嘗試設計gale shapley算法的第一步,在該算法中,每個男人都會與他們列表中每個女人的首選配對。

例如,如果我有

>>> men_choice = [[1, 2, 3, 0], [3, 1, 2, 0], [2, 1, 3, 0], [3, 2, 0, 1]]

possible_engagements = [(0, 1), (0, 3), (0, 2), (0, 3)] # current output

possible_engagements = [(0, 1), (1, 3), (2, 2), (3, 3)] # desired output

按我的計划輸出的是男性的第一選擇,但男性的索引卻沒有按順序排列。

我的循環有什么問題?

您只需要一個for循環就可以進行男裝選擇,並且要確保沒有重復的匹配項,您必須檢查該女士是否已與另一名男士配對。

def couple(men_choice, women_choice):

possible_engagements = []

# men's first choice
    for man in range(len(men_choice)):
            i = 0
            pair = (man, men_choice[i])
            while ([x[1] for x in possible_engagements].count(men_choice[i]) > 0):         #Check if woman is already chosen
                pair = (man, men_choice[i])
                i=i+1
            possible_engagements.append(pair)
    return possible_engagements

您的return關鍵字位於外循環內。 這意味着man只會取值0,因此是您當前的輸出。 下面的代碼可實現所需的輸出。

men_choice = [[1, 2, 3, 0], [3, 1, 2, 0], [2, 1, 3, 0], [3, 2, 0, 1]]
women_choice = []


def couple(men_choice, women_choice):
    possible_engagements = []
    for man in range(len(men_choice)):
        possible_engagements.append((man, men_choice[man][0]))
    return possible_engagements


possible_engagements = couple(men_choice, women_choice)
print(possible_engagements)

作為列表理解:

def couple(men_choice, women_choice):
    return [(i, x[0]) for i, x in enumerate(men_choice)]

作為for-loop生成器:

def couple(men_choice, women_choice):
    for i, x in enumerate(men_choice):
        yield (i, x[0])

作為for循環+ list.append:

def couple(men_choice, women_choice):
    engagements = []
    for i, x in enumerate(men_choice):
        engagements.append((i, x[0]))
    return engagements

暫無
暫無

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

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