In [3]:
# coding: UTF-8

In [46]:
male = {}
male2 = []
for i in range(3):
    list = []
    for j in range(3):
        print "男性No",i+1,"が",j+1,"番目に好きな女性は" 
        pref = input()
        list.append(int(pref))
    male.update({i+1: list})
    male2 = male.items()
    print "男性No", i+1,"の選好入力終わり"
male2


男性No 1 が 1 番目に好きな女性は
1
男性No 1 が 2 番目に好きな女性は
1
男性No 1 が 3 番目に好きな女性は
1
男性No 1 の選好入力終わり
男性No 2 が 1 番目に好きな女性は
1
男性No 2 が 2 番目に好きな女性は
1
男性No 2 が 3 番目に好きな女性は
1
男性No 2 の選好入力終わり
男性No 3 が 1 番目に好きな女性は
1
男性No 3 が 2 番目に好きな女性は
1
男性No 3 が 3 番目に好きな女性は
1
男性No 3 の選好入力終わり
Out[46]:
[(1, [1, 1, 1]), (2, [1, 1, 1]), (3, [1, 1, 1])]

In [47]:
female = {}
female2 = []
for i in range(3):
    list = []
    for j in range(3):
        print "女性No",i+1,"が",j+1,"番目に好きな男性は" 
        pref = input()
        list.append(int(pref))
    female.update({i+1: list})
    female2 = female.items()
    print "No", i+1,"の選好入力終わり"
female2


女性No 1 が 1 番目に好きな男性は
1
女性No 1 が 2 番目に好きな男性は
1
女性No 1 が 3 番目に好きな男性は
1
No 1 の選好入力終わり
女性No 2 が 1 番目に好きな男性は
2
女性No 2 が 2 番目に好きな男性は
2
女性No 2 が 3 番目に好きな男性は
2
No 2 の選好入力終わり
女性No 3 が 1 番目に好きな男性は
3
女性No 3 が 2 番目に好きな男性は
1
女性No 3 が 3 番目に好きな男性は
2
No 3 の選好入力終わり
Out[47]:
[(1, [1, 1, 1]), (2, [2, 2, 2]), (3, [3, 1, 2])]

In [48]:
mpref = []
for i in range(len(male2)):
    mpref.append(male2[i][1])
mpref


Out[48]:
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]

In [49]:
fpref = []
for i in range(len(female2)):
    fpref.append(female2[i][1])
fpref


Out[49]:
[[1, 1, 1], [2, 2, 2], [3, 1, 2]]

In [50]:
mnum = len(mpref)
fnum = len(fpref)
single = []
married = {}
have = []
down = 0

for i in range(fnum):
    have.append(0)

for i in range(mnum):
    single.append(i)
    
while len(single) > 0:
    
    for i in single:
        
        mbest = mpref[i][down] - 1
            
        if i+1 in fpref[mbest]:            
            if have[mbest] == 0:
                single.remove(i)
                have[mbest] = i + 1
            else:
                if down <= len(mpref):
                    if fpref[mbest].index(i+1) < fpref[mbest].index(have[mbest]):
                        single.remove(i)
                        single.append(have[mbest]-1)
                        have[mbest] = i + 1  
                    else:
                        down += 1
                else:
                    single.remove(i)
                    married.update({i+1: 0})
            
        elif down < len(mpref)-1:
            down += 1
        else:
            single.remove(i)
            married.update({i+1: 0})
           
    
for i in have:
    if i != 0:
        married.update({i:have.index(i)+1})
    else:
        list = []
        list.append(i)
        for i in range(len(list)):
            married.update({0:have.index(i)+1})
    
married = married.items()
for (i, j) in married:
    print "男性No.%sは女性No.%sと結ばれました。" % (i, j) ,have


男性No.0は女性No.2と結ばれました。 [1, 0, 0]
男性No.1は女性No.1と結ばれました。 [1, 0, 0]
男性No.2は女性No.0と結ばれました。 [1, 0, 0]
男性No.3は女性No.0と結ばれました。 [1, 0, 0]

In [ ]: