1

元の投稿に詳細を記載しました。

以下が配列のようなリストを生成することを知っています。

** 以下、OldDisplace は PyDisplace と同じサイズ

#
R_D = {}
keys = PyDisplace.keys()
keys.sort()
for val in keys:
    DX = PyDisplace[val][0] - OldDisplace[val][0]
    DY = PyDisplace[val][1] - OldDisplace[val][1]
    DZ = PyDisplace[val][2] - OldDisplace[val][2]
    R_D[val] = [DX, DY, DZ]

明らかに、私は Python を初めて使用します。

私の理解では、上記はテーブルまたは配列 R_D を生成します。これは 3 x *(keys() のサイズ) のサイズです ....

代わりに、ベクトルのようなリスト R_D (1 次元リスト) を取得するのを手伝ってもらえますか?

次の方法で R_D を取得できるようにします。

for val in keys:
   DX = R_D(3*(val-1)+1)
   DY = R_D(3*(val-1)+2) 
   DZ = R_D(3*(val-1)+3)

前もって感謝します....

4

2 に答える 2

0

別のアプローチ: 問題の元のコードでは、R_D を辞書として定義しています。2番目の部分を次のように修正すると機能します。

for val in keys:
  DX = R_D[val][0]
  DY = R_D[val][1]
  DZ = R_D[val][2]

実際に配列インデックスで算術演算を行いたい場合は、R_D をリストとして定義する必要がありますが、python 辞書は学習する価値のある強力なツールです。

さらに良い..

for val in keys:
  DX,DY,DZ = R_D[val]
于 2012-09-18T13:34:38.953 に答える
0

あなたがやろうとしていることを正確に理解しているかどうかはわかりません:)

一度に 3 つの値を生成していて、反復ごとにそれらをリストに追加したいようです。私は正しいですか?

list.extendメソッドを使用すると、これを非常に簡単に行うことができます。PyDisplace が以下のコードのように見えると仮定します。PyDisplace は 3 つの要素 pr キーのリストを含む辞書であると推測しているため、アイデアを示すためにいくつかの偽のデータを使用しました。私が離れている場合は、質問を更新してください:)

PyDisplace = {
    1: [10, 20, 30],
    2: [40, 50, 60],
    3: [70, 80, 90],
}
OldDisplace = {
    1: [1, 2, 3],
    2: [4, 5, 6],
    3: [7, 8, 9],
}

R_D = []  # or 'list()' if you will
keys = PyDisplace.keys()
keys.sort()
for val in keys:
    DX = PyDisplace[val][0] - OldDisplace[val][0]
    DY = PyDisplace[val][2] - OldDisplace[val][3]
    DZ = PyDisplace[val][2] - OldDisplace[val][2]

    # at each iteration, R_D will be extended with 
    # three new elements: DX, DY, DZ
    R_D.extend([DX, DY, DZ])

print R_D



**Output**

In [71]: print R_D
-------> print(R_D)
[9, 18, 27, 36, 45, 54, 63, 72, 81]

それで、これはあなたがしていることとどう違うのですか?

たとえば、R_D は dict() ではなく list() です。Python のリストは通常​​ 1 次元であるため、ここでの問題により適しているように思われます。また、反復ごとに別のリストでリストを拡張しています。

ディクショナリをトラバースする別の方法は、dict.iteritemsメソッドを使用することです。そうすれば、次のようにキーと値のペアを反復処理できます。

for k,v in PyDisplace.iteritems(): 
    print "key: %s, value: %s" % (k, v)

**Output:**

key: 1, value: [10, 20, 30]
key: 2, value: [40, 50, 60]
key: 3, value: [70, 80, 90]

編集:

ありがとう。この時点では、最初のものは私に適しているようです。繰り返しますが、私はPythonが初めてです。最終的には多くのことを学ぶことになりますが、その意味で、2 番目の方法を取得するのは簡単ではありません。つまり、Python について多くのことを知る必要があります。「dict.iteritems」など、あなたが言及したキーワードをstduします....ありがとう。– user1678622 2時間前

dict.iteritems () が行うことは、dict.keys()行うことと多少同じであり、反復する方法は既に知っています。 より単純な例を考えてましょう。次のように反復できます。

for key, value in dictionary.items():
    print "key: %s\nvalue: %s" % (key, value)

違いは、dict.iteritems()は反復可能なオブジェクトを返すことです...反復できます。for ループに対しては同じですが、内部では、リストは一度に 1 項目ずつ返されます。たとえば、大きな辞書では時間がかかる可能性がある 1 つのステップで構築されるのではありません。ファズの一部が解消されたことを願っています:)?

于 2012-09-18T12:40:36.407 に答える