0

forループ配列がtmp1から値を取得した後。後で使用するために値を保存するにはどうすればよいですか?

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]}
4

3 に答える 3

1

質問については少しわかりませんが、 の代わりprint(tmp1)に常にprint [44, 43, 42]...etc を使用したいと仮定します[5, 4, 3]

割り当てに関する問題は、tmp1 = arrays[:]スライス表記を使用して反復するリストのコピーを作成すると、元のリストが変更されることです。

元の配列を tmp1 に格納するために、タプルを作成し、tmp1各要素を に追加して配列を反復処理するのは、かなり非効率的な解決策tmp1です。もう 1 つは、以前に提案したように、データ構造をピクルすることです。

ただし、実際の解決策は、保存についての考え方を変更することのようです。tmp1呼び出し後に元の配列を保持する必要がある場合getCardRankself、関数のサイン。したがって、配列の元のコピーをメンバー変数 ( ) に格納する必要がありますself.foo = [array for array in arrays]

補足として、インライン条件を使用すると、コードが多少読みにくくなります。

于 2012-05-02T20:40:11.460 に答える
1

配列データ構造をピクルしてファイルに保存できます。

于 2012-05-02T20:26:56.787 に答える
0

あなたの関数シグネチャには がself含まれているため、この関数は何らかのオブジェクトのメンバー関数であると想定しています。

その場合、値をメンバー変数として保存して、インスタンス化されたオブジェクトの存続期間中保持することができます。

例えば:

def doSomething(self):
  self.someValue = 2

self.someValuedoSomething() が終了した後も存続し、呼び出し元のオブジェクトが削除されるまで存続します。

于 2012-05-02T20:36:28.607 に答える