lindex — 리스트에서 원소 하나 꺼내기

lindex — 리스트에서 원소 하나 꺼내기

리스트에서 몇 번째 원소를 가져오고 싶을 때 쓰는 명령어가 lindex예요. 인덱스는 0부터 시작하고, 리스트 끝을 기준으로 end, end-1처럼 상대적으로도 지정할 수 있어요. 인덱스를 여러 개 주면 겹겹이 중첩된 리스트 안으로 파고들어 원소를 찾아줘요.

출처: 문서

본문

lindex 명령어는 list를 인수로 받아 Tcl 리스트로 취급해요. 그리고 리스트에 대한 인덱스를 0개 이상 받아요. 인덱스는 명령줄에 연속해서 줄 수도 있고, Tcl 리스트로 묶어서 하나의 인수로 줄 수도 있어요.

인덱스가 주어지지 않으면 명령어는 다음과 같은 형태가 돼요.

lindex list

또는

lindex list {}

이 경우 lindex의 반환값은 그냥 list 인수의 값이에요.

인덱스가 하나 주어지면 lindexlist를 Tcl 리스트로 취급해서 그 index 번째 원소를 반환해요(0은 리스트의 첫 번째 원소를 가리켜요). 원소를 추출할 때 lindex는 중괄호·따옴표·백슬래시에 대해 Tcl 명령 인터프리터와 같은 규칙을 따르지만, 변수 치환과 명령 치환은 일어나지 않아요. 인덱스가 음수이거나 value의 원소 개수보다 크거나 같으면 빈 문자열이 반환돼요. 각 단순 인덱스 값의 해석은 string index 명령어와 동일해서, 단순 인덱스 산술과 리스트 끝 기준 인덱스를 지원해요.

인덱스 인수가 추가로 주어지면, 각 인수는 이전 인덱싱 연산의 결과에서 원소를 하나씩 골라내는 데 쓰여요. 덕분에 스크립트가 하위 리스트에서 원소를 고를 수 있어요. 다음 명령어

lindex $a 1 2 3

또는

lindex $a {1 2 3}

는 다음 명령어와 동일해요.

lindex [lindex [lindex $a 1] 2] 3

예시

리스트는 양쪽 끝 중 어느 쪽에서든 인덱싱할 수 있어요.

lindex {a b c} 0
      → a
lindex {a b c} 2
      → c
lindex {a b c} end
      → c
lindex {a b c} end-1
      → b

리스트 또는 인덱스 연속은 리스트의 리스트 안에서 선택해 주기도 해요.

lindex {a b c}
      → a b c
lindex {a b c} {}
      → a b c
lindex {{a b c} {d e f} {g h i}} 2 1
      → h
lindex {{a b c} {d e f} {g h i}} {2 1}
      → h
lindex {{{a b} {c d}} {{e f} {g h}}} 1 1 0
      → g
lindex {{{a b} {c d}} {{e f} {g h}}} {1 1 0}
      → g

리스트 인덱스는 다른 인덱스에 고정된 값을 더하거나 빼는 정도의 제한적인 계산도 수행할 수 있어요.

set idx 1
lindex {a b c d e f} $idx+2
      → d
set idx 3
lindex {a b c d e f} $idx+2
      → f

더 알아보기

  • list, lappend, linsert, llength, lsearch, lset, lsort, lrange, lreplace, string