2012-05-02 42 views
0

for循環數組從tmp1中獲取值之後。我如何儲存值供以後使用?Python參考

def getCardRank(self, arrays, straight = False): 
    print arrays 

    tmp1 = arrays[:] 
    tmp2 = {i: arrays[i] for i in range(0, len(arrays))} 

    print tmp1 

    for array in tmp1: 
    for card in array: 
     i = array.index(card) 
     mod = card % 13 

     if (mod == 0 and False != straight): 
     card = 0 if sum(array) == 27 else 13 
     else: 
     card = 13 if mod == 0 else mod 
     array[i] = card 

    print tmp1 
    print tmp2 

,讓我:

[[44, 43, 42, 41, 40], [37, 36, 35, 34, 33], [17, 16, 15, 14, 26]] 

[[44, 43, 42, 41, 40], [37, 36, 35, 34, 33], [17, 16, 15, 14, 26]] 

{0: [44, 43, 42, 41, 40], 1: [37, 36, 35, 34, 33], 2: [17, 16, 15, 14, 26]} 

[[5, 4, 3, 2, 1], [11, 10, 9, 8, 7], [4, 3, 2, 1, 13]] 

{0: [5, 4, 3, 2, 1], 1: [11, 10, 9, 8, 7], 2: [4, 3, 2, 1, 13]} 
+2

...我不明白。 –

回答

1

我對這個問題有點不清楚,但我會假設你想0123'總是print [44, 43, 42]...等而不是[5, 4, 3]

作業tmp1 = arrays[:]的問題在於,如果您使用切片符號創建列表的副本以迭代,the original list is changed

爲了存儲在TMP1原始陣列,相當低效的解決方案是創建一個元組tmp1和迭代陣列各元件附加到tmp1。正如先前所建議的那樣,另一種方法是醃製您的數據結構。

但是,它看起來像真正的解決辦法是改變你怎麼想存儲tmp1 - 考慮到,如果你需要調用getCardRank後保留了原有的陣列,你可能希望把它作爲對象的一部分self指的是函數的簽名。因此,您應該將數組的原始副本存儲在成員變量(self.foo = [array for array in arrays])中。

作爲一個方面說明,當您使用內聯條件時,它會使您的代碼更難以閱讀。

+0

我做了一個元組,然後轉換回列表。謝謝! – user1370497

1

您可以pickle您的陣列的數據結構來他們堅持到文件中。

0

由於你的函數簽名中有一個self,我假設這個函數是某個對象的成員函數。

在這種情況下,您可以將值保存爲成員變量,以便它們在實例化對象的生命週期中保持不變。

例如:

def doSomething(self): 
    self.someValue = 2 

self.someValue DoSomething的後保留()退出,這將持續到調用對象被刪除。