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

您可以腌制您的数组数据结构以将它们保存到文件中。

于 2012-05-02T20:26:56.787 回答
1

我对这个问题有点不清楚,但我假设你想print(tmp1)总是print [44, 43, 42]...etc 而不是[5, 4, 3].

分配的问题tmp1 = arrays[:]是,如果您创建一个列表的副本以使用切片表示法进行迭代,则原始列表会被更改

为了将原始数组存储在 tmp1 中,一个相当低效的解决方案是创建一个元组tmp1并遍历将每个元素附加到tmp1. 如前所述,另一个方法是腌制您的数据结构。

但是,看起来真正的解决方案是改变您考虑存储的方式tmp1- 考虑如果您需要在调用后保留原始数组getCardRank,您可能希望将其视为self函数中引用的对象的一部分签名。因此,您应该将数组的原始副本存储在成员变量 ( self.foo = [array for array in arrays]) 中。

附带说明一下,当您使用内联条件时,它会使您的代码更难阅读。

于 2012-05-02T20:40:11.460 回答
0

由于您的函数签名中有一个self,我假设这个函数是某个对象的成员函数。

在这种情况下,您可以将值保存为成员变量,以便它们在实例化对象的整个生命周期中持续存在。

例如:

def doSomething(self):
  self.someValue = 2

self.someValue将在 doSomething() 退出后持续存在,并且将持续存在直到调用对象被删除。

于 2012-05-02T20:36:28.607 回答