2012-05-02 1 views
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]} 
+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가 해봐요 후 지속됩니다()는 종료하고 호출 개체가 삭제 될 때까지이 지속됩니다.