0

個人的なプロジェクトのために Java に適応させたいと思うかもしれない Python コードのスニペットに出くわしましたが、操作を理解するのに苦労しています。スニペットには次のものが含まれます。

F={}
for stage in range(4):

  if stage == 0:
    F[stage]=[]
    i=0

    for j in range(i, len(words)+1):
      F[stage].append([cost(i, j), 0])

ここでcostは、2 つの整数値を取り、数学演算を返す外部定義です。

私が知っていることF={}から、Java HashMap に類似した辞書を[]初期化し、リストの初期化を示します。

まず、私は正しいですか、それは次のことをF[stage].append([cost(i, j), 0])意味します

  • cost関数の整数値を取り、
  • 2 つの値を持つリストを作成し、
  • F[ステージ]リストの最後に単一のコンテナとして追加しますか?

第二に、上記のコードに続くこの行部分には困惑しています。

if F[stage-1][i][0] + cost(i, j) ...

私が解釈している方法は、

  • F[stage - 1]その場所のリストを取得します
  • [i]サブリストコンテナにアクセスし、
  • [0]サブリストの最初のインデックス位置の値を取得します

私は正しい軌道に乗っていますか?

4

3 に答える 3

2

あなたが尋ねている行は、

if F[stage-1][i][0] + cost(i, j) ...

前の段階からのコスト計算を見ているようです。最適な次の動きを探すパス アルゴリズムのように思えます。私が前段階からのコスト計算だと言う理由は (明らかに)stage-1インデックスであり、また(リスト)に[cost(i, j), 0]が追加された場合、そのリストの要素は. したがって、「サブリストの最初のインデックス位置の値を取得する」と言うのは正しいですが、以前のコスト結果も具体的に取得していることを知っておくと役立つ場合があります。F[stage][0]cost(i, j)[0]

Java では、適切な名前のフィールドとアクセサーを使用して、コストと 2 番目のパラメーターが何であれ、2 項目のリストの代わりに小さなクラスを使用する方が慣用的かもしれません。

FPython コードは dict を使用しますが、数字のステージ キー 0 ~ 3 にのみアクセスすることで配列のように扱うため、 の dict の代わりに配列を使用しても問題ありません。

if F[stage-1] ...ただし、特に行が元のスニペットに含まれていないため、変換したいコンテキストの一部が欠けているのではないかと思います.

于 2013-03-11T01:48:17.020 に答える
1

まず、 F[stage].append([cost(i, j), 0]) が意味することは正しいですか

コスト関数の整数値を取り、2 つの値を持つリストを作成し、それを単一のコンテナとして F[stage] リストの最後に追加しますか?


あなたの理解は正しいです。F[stage] はリストのリストになります。


私が解釈している方法は、

F[stage - 1] は場所
[i] でリストを取得し、[i] はサブリスト コンテナーにアクセスし、
[0] はサブリストの最初のインデックス位置で値を取得します。


F[stage] は、その構造のリストのリストであると私には思えます:
[[cost(i, j) が返すもの, 0], [cost(i, j) が返すもの, 0]....]
ここでは i が 0 であるため (または変更されますか?) F[stage-1][i][0] は最後のステージのコスト (0, 0)を参照
します 現在のステージに最後のステージのコストを追加しているようです何かを決定する。

于 2013-03-11T01:31:56.587 に答える
0

Python コードを理解するために行ったコメントの正しい軌道に乗っています。もちろん、それはそのコードが何をしているかのコンテキストに依存します。しかし、Python のディクショナリ/リスト構造に関しては、このような単純なディクショナリから始めることができます

>>> tst = {'one':1, 'two':2}
>>> tst
{'two': 2, 'one': 1}

ネストされたリストで「one」の値を置き換えるようになりました

>>> tst['one'] = [1, ['a', 'b', 'c'], 3]
>>> tst
{'two': 2, 'one': [1, ['a', 'b', 'c'], 3]}

ネストされたリストの「c」に到達する

>>> tst['one'][1][2]
'c'

ネストされた配列を追加することで、さらに一歩進めることができます。私が間違っていなければ、Python のどのリストも「ギザギザ配列」になる可能性があります。

于 2013-03-11T01:59:56.023 に答える