2012-09-17 67 views
1

我在原文中放置了更多細節。在Python中保存類似矢量的(一維)列表

我知道以下內容會生成一個類似數組的列表。

**在下面,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 *(鍵()的大小)的大小....

有人能幫助我獲得病媒像列表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) 

在此先感謝....

+2

我不知道Fortran語言,所以我不能從你的例子告訴......正是將所需的「一維」列表中的每個元素看起來像? – glibdud

回答

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。我會編寫你提到的關鍵詞如 「dict.iteritems」等....再次感謝。 - user1678622 1小時前

那麼什麼dict.iteritems()呢,有點一樣dict.keys()呢,你已經知道如何迭代。讓我們考慮一個更簡單的例子,dict.items() 字典。items()返回字典中所有鍵 - 值對的2元組的完整列表,同樣的方式返回一個有限的鍵列表。你可以遍歷它是這樣的:

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

不同的是,dict.iteritems()返回一個iterable對象,你可以...遍歷。對於for循環來說,它是相同的,但在引擎蓋下,列表一次返回一個項目,而不是一步構建,例如對於大型詞典可能會很慢。我希望清除一些絨毛:)?

+0

謝謝。在這一點上,第一個似乎很適合我。再次我是Python的新手。最終我會學到很多東西,從這個意義上說,第二種方法並不容易。這意味着我需要很多關於Python的知識。我會編寫你提到的關鍵詞,如「dict.iteritems」等....再次感謝。 – user1678622

+0

@ user1678622我已編輯帖子,希望澄清iteritems()呼籲你:) –

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] 
+0

感謝您的回覆。是的,在這一點上,我需要做一些指數的算術。但是,我會學習「詞典」來更好地瞭解。再次感謝。 – user1678622