2012-05-02 15 views
0

を参照すると、tmp1から値が取得されます。後で使用するために値を保存するにはどうすればよいですか?私を与えforループの配列の後に、

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

質問には少し不明ですが、[5, 4, 3]の代わりにprint(tmp1)を常にprint [44, 43, 42]...などにしたいとします。

割り当ての問題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の()終了後も持続し、呼び出し元オブジェクトが削除されるまで、それが持続します。

関連する問題