2013-07-05 1 views
0

사이드 프로젝트와 C++ 11 연습으로 나는 Numpy의 정맥에있는 n 차원 배열의 작은 라이브러리를 작업 중입니다. 대부분 Numpy 규칙을 따르려고하지만 슬라이싱의 경우 나는 다른 것을 선택하는 것에 대해 생각하고 있습니다.파이썬 스타일 슬라이싱의 함정을 피하십시오

문제는 인덱스에 음수 변수를 사용할 때와 역순으로 반복 할 때 범위의 마지막 요소에 항상 액세스 할 수 없다는 것입니다. 예를 들어, array[x:y]은 음수가 y 인 마지막 요소를 포함 할 수 없습니다. 편집 : 나는 None 전달 정확히 파이썬이이 문제를 해결하지 못했습니다. 그래도 문제는 여전히 피할 수없는 특수한 해결책 인 것처럼 보이며 C++의 그것과 대응하는 것이 번거로울 수 있습니다.

  1. 사용 포함 범위, 하스켈 같은 :

    나는 세 가지 옵션을 고려했습니다. 결국, 하스 켈러 (Haskellers)는 특별히 신경을 쓰지 않습니다. 이것은 파이썬 경험에서 크게 벗어난 것입니다.

  2. 부정적인 색인을 허용하지 않습니다. 유용성면에서 그다지 개선되지 않았으며, 마지막에서 인덱스를 세는 것이 절대적으로 필요하다면 크기에서 간단한 빼기가 충분합니다.

  3. 파이썬에서와 같은 방식으로 슬라이스합니다. 위에서 언급 한 문제는 실제 코드에서는 드물게 나타나며 사람들은 쉽게 찾아 낼 수 있습니다.

현재 옵션 1쪽으로 기울고 있습니다. 문제에 대한 의견이 있으십니까?

+0

음수 색인 문제는 끝점 포함/제외 문제와 어떤 관련이 있습니까? – BrenBarn

+0

이것은 주관적인 것으로 표시 될 수 있습니다. – 2rs2ts

+0

"범위의 마지막 요소는 항상 접근 할 수 없습니다"- 코드에 대한 요구 사항이라고 말하고 있습니까? 파이썬 슬라이스는 그러한 어리석은 제한을 가지고 있지 않습니다. – tdelaney

답변

2

"색인 생성을 위해 변수를 사용할 때 범위의 마지막 요소에 항상 액세스 할 수 없습니다."라는 말을 잘못 들었습니다.

>>> x = 5 
>>> y = 100 
>>> r = list(range(10)) 
>>> r[x:y]  # much larger number than last index 
[5, 6, 7, 8, 9] 
>>> r[x:len(r)] # length of the list 
[5, 6, 7, 8, 9] 
>>> y = None 
>>> r[x:y]  # variable set to None 
[5, 6, 7, 8, 9] 

None 또한 목록을 역방향으로 읽는 경우에도 적용됩니다.

+0

불명확 한 제형에 대해 실례합니다. 질문을 편집했습니다. 나는 또한 "없음"트릭을 몰랐다. –

관련 문제