In [3]:
#http://ja.wikipedia.org/wiki/%E5%AE%89%E5%AE%9A%E7%B5%90%E5%A9%9A%E5%95%8F%E9%A1%8C
#これが入力となる
men = {"こうき":("るい","ひとみ","あい"), "だいき":("るい","あい","ひとみ"), "ともき":("あい","るい","ひとみ")}
women = {"るい":("ともき","こうき","だいき"), "ひとみ":("ともき","こうき","だいき"), "あい":("だいき","ともき","こうき"),}
#目標の出力は、安定マッチング(男女3組のペア)

In [5]:
N=6
M=[[j for j in range(N)] for i in range(N)]
M


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

In [17]:
#http://skzy.hatenablog.com/entry/2013/01/26/050459
import random
 
N=6
 
M=[[j for j in range(N)] for i in range(N)]
F=[[j for j in range(N)] for i in range(N)]
for j in range(N):
     for i in range(N*5):
        s=M[j][random.randint(0,N-1)]
        M[j].remove(s)
        M[j].append(s)
        s=F[j][random.randint(0,N-1)]
        F[j].remove(s)
        F[j].append(s)

print M
print F

single=[ i for i in range(N)]
pair=[ -1 for i in range(N)]
 
while len(single)>0:
    x=single.pop()
    y=M[x].pop()
    if pair[y]!=-1:
        if F[y].index(pair[y]) < F[y].index(x):
            single.insert(0,pair[y])
            pair[y]=x
        else:
            single.insert(0,x)
    else:
        pair[y]=x
print M
print pair


[[5, 0, 3, 1, 2, 4], [0, 3, 4, 5, 2, 1], [2, 0, 4, 1, 3, 5], [4, 0, 3, 2, 1, 5], [0, 1, 4, 3, 2, 5], [0, 1, 4, 3, 2, 5]]
[[0, 2, 5, 3, 1, 4], [0, 5, 2, 1, 3, 4], [0, 2, 5, 1, 4, 3], [0, 4, 1, 3, 5, 2], [2, 0, 4, 5, 1, 3], [0, 4, 3, 5, 1, 2]]
[[5], [0, 3], [2, 0, 4, 1, 3], [4, 0, 3, 2], [0, 1, 4, 3], [0, 1, 4]]
[0, 3, 4, 5, 1, 2]

In [13]:
pair=[ -1 for i in range(N)]
pair


Out[13]:
[-1, -1, -1, -1, -1, -1]

In [18]:
men = {"こうき":("あい","ひとみ","るい"), "だいき":("ひとみ","あい","るい"), "ともき":("ひとみ","るい","あい")}
women = {"るい":("だいき","こうき","ともき"), "ひとみ":("だいき","こうき","ともき"), "あい":("こうき","ともき","だいき"),}

single = ["こうき", "だいき", "ともき"]
pair = [1, 1, 1]

while len(single)>0:
    x = single.pop()
    y = M[x].pop()
    if pair[y] != 1:
        if F[y].index(pair[y]) < F[y].index(x):
            single.insert(0, pair[y])
            pair[y] = x
        else:
            single.insert(0, x)
    else:
        pair[y] = x


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-a8da23873c98> in <module>()
      7 while len(single)>0:
      8     x = single.pop()
----> 9     y = M[x].pop()
     10     if pair[y] != 1:
     11         if F[y].index(pair[y]) < F[y].index(x):

TypeError: list indices must be integers, not str

In [1]:
"""
引用元
http://skzy.hatenablog.com/entry/2013/01/26/050459
http://ja.wikipedia.org/wiki/%E5%AE%89%E5%AE%9A%E7%B5%90%E5%A9%9A%E5%95%8F%E9%A1%8C
http://toyokeizai.net/articles/-/11584?page=2
http://docs.python.jp/2/tutorial/datastructures.html
"""
#M,Fのindexが男性の名前を表し、内包されているリストが選好を表します。
M = [[2,1,0], [1,2,0], [1,0,2]]
F = [[1,0,2], [1,0,2], [0,2,1]]
#Mの名前をただ定義します。
single = [0, 1, 2]
#女性から見た相手のリストを仮に作ります。
pair = [-1, -1, -1]
#アルゴリズムを実行します。
while len(single)>0:
    x = single.pop()
    y = M[x].pop()
    if pair[y] != -1:
        if F[y].index(pair[y]) < F[y].index(x):
            single.insert(0, pair[y])
            pair[y] = x
        else:
            single.insert(0, x)
    else:
        pair[y] = x
#ペア成立した組を表示します。(M,,F)の順
for i in pair :
    print (pair[i], i)


(1, 2)
(2, 0)
(0, 1)

In [34]:
for i in pair :
    print (i, pair[i])


(2, 1)
(0, 2)
(1, 0)

In [32]:
type(len(pair))


Out[32]:
int

In [33]:
type(range(3))


Out[33]:
list

In [1]:
testit 時間をはかれる


  File "<ipython-input-1-fe01a00cd93c>", line 1
    testit 時間をはかれる
           ^
SyntaxError: invalid syntax

In [ ]: