2012年9月15日土曜日

Pythonの多次元配列の初期化うんぬん

リーグテーブルを作りたくなって、その中で多次元配列をいじりたいな~って思ったので、 お得意(最近たたいてるだけ)のPythonで書いてみました。
とりあえず
table = [[''] * number] * number
for table_i in range(number):
    for table_j in range(number):
 print table_i,' : ',table_j
 if table_i == table_j:
  table[table_i][table_j] = '-'
 else:
         table[table_i][table_j] = {'result':'','score':''}
ってすれば初期化できるみたいなのでやってみたところ...
[[{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-'],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-'],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-'],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-'],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-']]
...なんか思ってるのと違くね?まあいいか、次は試合結果の代入だ。
[[{'result': 'l', 'score': '1-2'},
  {'result': 'w', 'score': '2-1'},
  {'result': 'd', 'score': '1-1'},
  {'result': 'd', 'score': '1-1'},
  '-'],
 [{'result': 'l', 'score': '1-2'},
  {'result': 'w', 'score': '2-1'},
  {'result': 'd', 'score': '1-1'},
  {'result': 'd', 'score': '1-1'},
  '-'],
 [{'result': 'l', 'score': '1-2'},
  {'result': 'w', 'score': '2-1'},
  {'result': 'd', 'score': '1-1'},
  {'result': 'd', 'score': '1-1'},
  '-'],
 [{'result': 'l', 'score': '1-2'},
  {'result': 'w', 'score': '2-1'},
  {'result': 'd', 'score': '1-1'},
  {'result': 'd', 'score': '1-1'},
  '-'],
 [{'result': 'l', 'score': '1-2'},
  {'result': 'w', 'score': '2-1'},
  {'result': 'd', 'score': '1-1'},
  {'result': 'd', 'score': '1-1'},
  '-']]
はい!全然ダメ!どうしたもんか..と調べてると「掛け算だと配列同士に参照関係が作られてしまうので、思った通りのた次元配列にはならない」ということを発見した。同時に「内包表記で定義すると幸せになれる」とも書いてある。やってみよう!
初期化:

[['-',
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''}],
 [{'result': '', 'score': ''},
  '-',
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''}],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-',
  {'result': '', 'score': ''},
  {'result': '', 'score': ''}],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-',
  {'result': '', 'score': ''}],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-']]
試合結果代入後:
[['-',
  {'result': 'w', 'score': '2-1'},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''}],
 [{'result': 'l', 'score': '1-2'},
  '-',
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''}],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-',
  {'result': '', 'score': ''},
  {'result': '', 'score': ''}],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-',
  {'result': '', 'score': ''}],
 [{'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  {'result': '', 'score': ''},
  '-']]
上手く行ったぜ!これで一安心。 余談ですがこのPCだと多次元配列が「た次元配列」になっていらいらした。(笑)

0 件のコメント:

コメントを投稿