4

私はPythonを学んでいて、この例に出くわしました:

W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))
b = ['a','b','c','d','e','f','g','h','i']
for row in W:
    print b[row[0]], b[row[1]], b[row[2]]

これは次を印刷します:

abc

デフォルト

あえい

セグ

その理由を調べてみました!

たとえば、拡張バージョンを初めて使用する場合は次のようになります。

print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]

しかし、 (0,1,2) がどのように相互作用しているのかわかりません。誰でも説明できますか?ありがとう。

(これは、三目並べゲームのコードの短縮版であり、うまく機能します。この部分がわかりません)

4

6 に答える 6

4

ショットでは、(0,1,2)は何もしません。これはタプルであり、リストのようにインデックスを付けることができるため、以降にb[(0,1,2)[0]]なります。b[0](0,1,2)[0] == 0

最初のステップでは Python はb[row[0]]b[(0,1,2)[0]]b[0]'a'

ところで、一度にシーケンスから複数のアイテムを取得するには、演算子を使用できます。

from operator import itemgetter
for row in W:
    print itemgetter(*row)(b)
于 2009-10-23T16:44:42.510 に答える
4

タプルのタプルを反復処理します。それぞれが 3 要素のタプルです。出力するときは、タプルに含まれるインデックスによってリストrowの 3 つの要素にアクセスします。brow

おそらく、これを行うためのやや雑然とした方法は次のとおりです。

for f, s, t in W:
    print b[f], b[s], b[t]
于 2009-10-23T16:45:59.793 に答える
0

タプルにインデックスを付けると、配列にインデックスを付ける場合と同様に、n 番目の要素が抽出されます。つまり拡大版

print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]

に等しい

print b[0], b[1], b[2]

IE、(0, 1, 2) タプル ( (0, 1, 2)[0]) の 0 番目の要素は 0 です。

于 2009-10-23T16:45:46.610 に答える
0

for row in W:

配置される最初のタプルrow(0,1,2)

言い換えると、W[0] == (0,1,2)

Therefore, since `row` == (0,1,2), then row[0] == 0

だから、[0]th element of b == 'a'

b[0] == 'a'

等々...

b[1] == 'b'
b[2] == 'c'
于 2009-10-23T16:46:10.697 に答える
0

各ステップですべての変数の値を書き留めてみてください。得られる結果は正しいです。

相互作用 1:

  • 行は (0,1,2)
  • b[行[0]]、b[行[1]]、b[行[2]]はb[(0,1,2)[0]、(0,1,2)[1]、(0 ,1,2)[2]], == b[0], b[1], b[2]

相互作用 2:

  • は (3,4,5)
  • b[行[0]]、b[行[1]]、b[行[2]]はb[3]、b[4]、b[5]
于 2009-10-23T16:47:56.343 に答える
0

Python インタラクティブ シェルは、何が起こっているかを確認するのに役立ちます。

In [78]: W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))

In [79]: b = ['a','b','c','d','e','f','g','h','i']

In [81]: row=W[0]       # The first time throught the for-loop, row equals W[0]

In [82]: row
Out[82]: (0, 1, 2)

In [83]: row[0]
Out[83]: 0

In [84]: b[row[0]]
Out[84]: 'a'

In [85]: b[row[1]]
Out[85]: 'b'

In [86]: b[row[2]]
Out[86]: 'c'
于 2009-10-23T16:49:00.597 に答える