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 by *(size of keys()) ...。

有人可以帮我获得类似矢量的列表 R_D(一维列表)吗?

这样我就可以通过以下方式检索 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

我不确定我是否完全理解你想要做什么:)

看起来您一次生成 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 是一个 list() 而不是一个 dict()。python 中的列表通常是一维的,因此在这里看起来更适合您的问题。此外,我在每次迭代时都用另一个列表扩展列表。

遍历字典的另一种方法是使用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 的新手。最终我会学到很多东西,从这个意义上说,第二种方法并不容易获得。这意味着我需要很多关于 Python 的知识。我会stdu你提到的关键词,比如“dict.iteritems”等……再次感谢。– user1678622 2 小时前

那么dict.iteritems()的作用与dict.keys()的作用有些相同,您已经知道如何迭代。让我们考虑一个更简单的示例,dict.items() dict.items() 返回字典中所有键值对的 2 元组的完整列表,与dict.keys()返回有限键列表的方式相同。你可以像这样迭代它:

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

不同之处在于,dict.iteritems()返回一个可迭代的对象,您可以......迭代。对于 for 循环,它是相同的,但在引擎盖下,列表一次返回一项,而不是一步构建,这对于大字典来说可能很慢。我希望清除一些模糊不清:)?

于 2012-09-18T12:40:36.407 回答
0

替代方法:问题中的原始代码将 R_D 定义为字典。如果您将第二部分修复为:

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 回答