2013-03-16 2 views
1

R에서 왔을 때, 이것은 이해하기 어렵습니다. 목록에서 요소를 가져 오는 위치는 0입니다. 문제는 하나의 목록을 사용하여 다른 목록의 항목을 선택하는 것이 여기 같은 속도로 실행되지 않는다는 것입니다.인덱스가 다른 인덱스를 사용하여 동기화되지 않았습니다.

list1 = [1,2,3,4] 

list2 = [1,2,3,4] 

for x in range(0, len(list1)): 
    print(list1[list2[x]]) 

이 발생합니다 : 나는리스트 2의 끝에 항목을 목록 1의 시작에 별도의 항목을 넣어 추가

>> 2 
>> 3 
>> 4 
>> IndexError: list index out of range 

이 문제는 그렇지 않은 이유만으로 (정지 이와 같은 동기식).

분명히 나는 ​​언어에 익숙하지 않다. 한 목록의 값을 사용하여 다른 값을 선택하는 올바른 방법은 무엇일까요?

이것을 생각하는 올바른 방법입니까?

for x in range(0, len(list1)): 
    print(list1[list2[x]-1]) 

답변

2

파이썬은 0 인덱스 기반입니다. seq[0]seq의 첫 번째 요소입니다.

R은 1- 색인 기반입니다.

그래서, 그래, 파이썬에서 당신은 len(list2)하지 len(list1)까지 가야한다

list1 = [1,2,3,4] 
list2 = [1,2,3,4] 
for x in range(0, len(list2)): 
    print(list1[list2[x]-1]) 
  • 범위를 사용할 수 있습니다.
  • 또한 range(0, len(list2))range(len(list2))과 동일합니다. range에 인수가 하나만 전달되면 stop 값으로 해석되며 시작 값은 기본적으로 0입니다. 파이썬

    for x in range(...): 
    

    종종 피할 수있다, 그렇다면 바람직하다


참고. 대신

for item in list2: 
    print(list1[item-1])  

를 쓸 수 및 itemlist2의 각 항목에 할당됩니다.

+0

매우 유용한 정보, 찾고있는 정보! 감사. – PascalVKooten

+0

추한'-1'을 피할 수는 없지만, 파이썬을 사용하는 사람들에게는 정상입니다. – PascalVKooten

+0

우리는'list2'를 시작하기에 덜 가치있는 값으로 만들어서, 하나 빼기 필요는 없습니다. 'R's' 색인은 자기 일관성이있는 것처럼 자기 일관성있는 시스템입니다. 한 시스템에서 다른 시스템으로 변환 할 때만 문제가 발생합니다. Edsger Dijkstra는 [0 기반 인덱싱이 바람직한 이유에 대한 논의] (http://www.cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF)를 작성했습니다. – unutbu

1

목록에 4 개의 항목이있는 경우 색인은 0에서 3까지 실행해야하므로 값 4를 사용하면 오류가 발생합니다. 다음은 문자가 명확하게 표시 될 수있는 예입니다.

list1 = [0,2,1,3] 
list2 = ['a','a','d','m'] 

for x in list1: 
    print(list2[x]), 

=> a d a m 
관련 문제