2013-08-12 3 views
5

나는 there are differences between lists and tuples 것을 잘 알고있어 그 tuples aren't just constant lists하지만이 실제로 코드 (코딩 규칙에 의해 반대)에 의해 다르게 취급하는 몇 가지 사례가있다, 그래서)는 서로 바꾸어 사용했습니다.목록 및 튜플 동작합니다 다르게

>>> import numpy as np 
>>> a = np.arange(9).reshape(3,3) 
>>> a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 7, 8]]) 
>>> idx = (1,1) 
>>> a[idx] 
4 
>>> idx = [1,1] 
>>> a[idx] 
array([[3, 4, 5], 
     [3, 4, 5]]) 

사람이 여기에 무슨 일이 일어나고 있는지 설명 할 수 :

그때 나는 그들이 완전히 다른 행동을주는 경우를 건너 왔어요? 더 중요한 것은,이 함정이 어디에서 다른 곳에 나타나는가? NumPy와에서, 색인의 세 가지 유형의 색인이에 대한 튜플을 사용

  • 기본 슬라이스
  • 고급 인덱싱
  • 기록 액세스

을 지원하기 때문

답변

4

당신은 다른 동작을 얻고있다 매개 변수 목록과 동일합니다. 기본 슬라이스로 접미사가 지정됩니다. 목록과 같은 터플이 아닌 고급 항목을 사용하면 고급 인덱싱이됩니다.

또한 documentation

고급 인덱싱 선택 오브젝트, OBJ하는 비 튜플 시퀀스 객체 ndarray 때 트리거에서 기억 (데이터 정수형 또는 불리언) A 또는 적어도 하나의 시퀀스 객체 또는 ndarray (데이터 유형이 정수 또는 bool 인 튜플). 고급 인덱싱에는 정수 과 부울의 두 가지 유형이 있습니다.

고급 인덱싱은 항상 데이터 복사본을 반환합니다 (보기를 반환하는 기본 슬라이스와 대조).

그리고 또한이 같은 문서 파이썬

의 X로부터 [(EXP1가 EXP2이, ..., EXPN)]를 X 동등 [EXP1, EXP2, ... expN]; 후자는 전자의 정당한 설탕이다.

+0

+1 내 대답이 더 낫습니다. – defuz

관련 문제