In [3]:
# coding: UTF-8

In [253]:
male = {}
male2 = []
for i in range(5):
    list = []
    for j in range(5):
        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 番目に好きな女性は
2
男性No 1 が 3 番目に好きな女性は
3
男性No 1 が 4 番目に好きな女性は
1
男性No 1 が 5 番目に好きな女性は
2
男性No 1 の選好入力終わり
男性No 2 が 1 番目に好きな女性は
3
男性No 2 が 2 番目に好きな女性は
1
男性No 2 が 3 番目に好きな女性は
2
男性No 2 が 4 番目に好きな女性は
3
男性No 2 が 5 番目に好きな女性は
1
男性No 2 の選好入力終わり
男性No 3 が 1 番目に好きな女性は
1
男性No 3 が 2 番目に好きな女性は
1
男性No 3 が 3 番目に好きな女性は
4
男性No 3 が 4 番目に好きな女性は
3
男性No 3 が 5 番目に好きな女性は
4
男性No 3 の選好入力終わり
男性No 4 が 1 番目に好きな女性は
3
男性No 4 が 2 番目に好きな女性は
2
男性No 4 が 3 番目に好きな女性は
1
男性No 4 が 4 番目に好きな女性は
3
男性No 4 が 5 番目に好きな女性は
4
男性No 4 の選好入力終わり
男性No 5 が 1 番目に好きな女性は
5
男性No 5 が 2 番目に好きな女性は
3
男性No 5 が 3 番目に好きな女性は
2
男性No 5 が 4 番目に好きな女性は
1
男性No 5 が 5 番目に好きな女性は
2
男性No 5 の選好入力終わり
Out[253]:
[(1, [1, 2, 3, 1, 2]),
 (2, [3, 1, 2, 3, 1]),
 (3, [1, 1, 4, 3, 4]),
 (4, [3, 2, 1, 3, 4]),
 (5, [5, 3, 2, 1, 2])]

In [177]:
female = {}
female2 = []
for i in range(5):
    list = []
    for j in range(5):
        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 番目に好きな男性は
3
女性No 1 が 2 番目に好きな男性は
3
女性No 1 が 3 番目に好きな男性は
3
女性No 1 が 4 番目に好きな男性は
3
女性No 1 が 5 番目に好きな男性は
3
No 1 の選好入力終わり
女性No 2 が 1 番目に好きな男性は
3
女性No 2 が 2 番目に好きな男性は
3
女性No 2 が 3 番目に好きな男性は
3
女性No 2 が 4 番目に好きな男性は
3
女性No 2 が 5 番目に好きな男性は
3
No 2 の選好入力終わり
女性No 3 が 1 番目に好きな男性は
3
女性No 3 が 2 番目に好きな男性は
3
女性No 3 が 3 番目に好きな男性は
3
女性No 3 が 4 番目に好きな男性は
3
女性No 3 が 5 番目に好きな男性は
3
No 3 の選好入力終わり
女性No 4 が 1 番目に好きな男性は
3
女性No 4 が 2 番目に好きな男性は
3
女性No 4 が 3 番目に好きな男性は
3
女性No 4 が 4 番目に好きな男性は
3
女性No 4 が 5 番目に好きな男性は
3
No 4 の選好入力終わり
女性No 5 が 1 番目に好きな男性は
3
女性No 5 が 2 番目に好きな男性は
5
女性No 5 が 3 番目に好きな男性は
5
女性No 5 が 4 番目に好きな男性は
5
女性No 5 が 5 番目に好きな男性は
5
No 5 の選好入力終わり
Out[177]:
[(1, [3, 3, 3, 3, 3]),
 (2, [3, 3, 3, 3, 3]),
 (3, [3, 3, 3, 3, 3]),
 (4, [3, 3, 3, 3, 3]),
 (5, [3, 5, 5, 5, 5])]

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


Out[254]:
[[1, 2, 3, 1, 2],
 [3, 1, 2, 3, 1],
 [1, 1, 4, 3, 4],
 [3, 2, 1, 3, 4],
 [5, 3, 2, 1, 2]]

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


Out[255]:
[[3, 3, 3, 3, 3],
 [3, 3, 3, 3, 3],
 [3, 3, 3, 3, 3],
 [3, 3, 3, 3, 3],
 [3, 5, 5, 5, 5]]

In [256]:
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]:            #i+1が選好にいるか否か
            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:
        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.1と結ばれました。 [0, 0, 0, 3, 0]
男性No.1は女性No.0と結ばれました。 [0, 0, 0, 3, 0]
男性No.2は女性No.0と結ばれました。 [0, 0, 0, 3, 0]
男性No.3は女性No.4と結ばれました。 [0, 0, 0, 3, 0]
男性No.4は女性No.0と結ばれました。 [0, 0, 0, 3, 0]
男性No.5は女性No.0と結ばれました。 [0, 0, 0, 3, 0]