2012-11-08 3 views
2

저는 파이썬 2.7로 게임을합니다. 여기에 내 문제는 다음과 같습니다변수 목록이 파이썬에서 자동으로 업데이트됩니다.

>>> bra=[] 
>>> put=['a','t'] 
>>> bra.append(put) 
>>> bra 
[['a', 't']] 
>>> bra.append(put) 
>>> bra 
[['a', 't'], ['a', 't']] 
>>> bra.append(put.reverse()) 
>>> bra 
[['t', 'a'], ['t', 'a'], None] 

내 질문은 왜 드 파이썬 인터프리터가 마지막 줄에 그 결과를 제공 않으며, 대신 :

[['a', 't'], ['a', 't'], ['t', 'a']] 

또는 어떻게이 결과를 얻을 수 있나요?

답변

4

list.reverse()은 목록을 현재 위치에서 수정하고 아무 것도 반환하지 않으며 이는 None을 반환하는 것과 같습니다.

reversed(put)이 필요합니다. This function 실제로 iterable의 반전 된 버전을 리턴합니다.

5

두 가지 문제 :

  1. list.reverse 방법은 현재 위치에서 목록을 수정하고 아무 것도 반환하지 않습니다 (즉, 그것이 None을 반환). 대신 reversed 메소드를 사용하려고했을 것입니다.
  2. bra 목록의 처음 두 요소는 모두 동일한 기본 개체를 나타냅니다. 따라서 해당 객체를 수정하면 처음 두 요소가 다시 동일한 수정 된 객체를 참조하므로 두 요소 모두에 대해 ['t', 'a']이 표시됩니다. 대신 같은 객체에 대한 참조로 별도의 객체를 사용하려면

, 당신은 슬라이스 연산자를 사용하여 복사본을 만들 수 있습니다 다음 reversed 방법에 대한 대안으로

bra.append(put[:]) # Appends a copy of 'put' 

을, 당신은 또한 사용할 수 있습니다 어떤 사람들에게는 코드가하는 일이 분명한 것은 아니지만 -1의 스텝을 가진 슬라이싱 연산자는 코드가하는 일을 분명하게 알려주지 않습니다 :

bra.append(put[::-1]) # Equivalent to bra.append(reversed(put)) 
+0

+1 왜 브래지어 [0]과 브래지어 [ 1]'이 뒤집 혔고, 왜 브래지어 [2] '없음'이었다. – abarnert

+0

감사합니다. 매우 도움이됩니다. :) –

관련 문제