2012-05-02 43 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的后保留()退出,这将持续到调用对象被删除。