IDL/Data Type & Format

새로운 Data Type인 리스트(List)에 관하여 [2]

이상우_idl 2011. 5. 9. 17:29
728x90
반응형

두 개의 리스트를 합하여 하나의 리스트로 만들 수도 있습니다. 이 경우 다음과 같이 (+)오퍼레이터를 사용합니다.


IDL> list1 = LIST('zero', 1, 2.0)

IDL> list2 = LIST(!PI, 'one', [1, 2, 3, 4])

IDL> list3 = list1 + list2

IDL> PRINT, list3

zero

1

2.00000

3.14159

one

1  2  3  4


EQ 오퍼레이터를 이용하여 리스트와 리스트를 서로 비교할 수도 있습니다. 이 경우 결과는 1 또는 0의 값들로 이루어진 배열의 형태가 되며, 이 배열의 크기는 두 리스트 중 원소의 갯수가 적은 리스트의 원소의 갯수가 됩니다. 다음 예제를 봅시다.


IDL> list1 = LIST('alpha', 5, 19.9)

IDL> list2 = LIST('alpha', 'abc', 19.9)

IDL> PRINT, list1 EQ list2

1 0 1


여기서는 두 리스트가 모두 원소의 갯수가 3입니다. 만약 list1이 다음과 같이 4개의 원소를 갖게 될 경우도 있습니다. 이 경우에도 결과는 갖습니다. 왜냐하면 list2의 원소갯수가 3이므로 이 갯수만큼의 결과만 나오기 때문입니다.


IDL> list1 = LIST('alpha', 5, 19.9, 22.6)

IDL> PRINT, list1 EQ list2

1 0 1


리스트와 단일값을 비교할 수도 있습니다. 이 경우의 결과는 리스트의 원소의 갯수만큼의 0 또는 1의 값들로 이루어진 배열이 됩니다.


IDL> list3 = LIST('gamma', 77, 14.6, 35)

IDL> PRINT, list3 EQ 77

0 1 0 0


참고로 EQ 대신 NE 오퍼레이터를 사용하면 결과가 반대로 나올 것임은 쉽게 짐작할 수 있습니다.


이번에는 리스트의 원소들에 대한 여러가지 접근방법들을 살펴보겠습니다. 리스트는 기본적으로 1차원 배열과 유사한 구조를 갖기 때문에, 일반적으로 1차원 배열을 다룰 경우와 비슷한 방법들이 사용됩니다. 리스트내의 특정 원소값을 뽑아내려면 다음과 같이 인덱스를 사용하면 됩니다.


IDL> list = LIST('gamma', 46, 78.2, 12, [3, 4, 5])

IDL> PRINT, list[2]

78.2

IDL> PRINT, list[4]

3  4  5


물론 특정 위치의 원소값을 다른 값으로 대치할 수도 있습니다.


IDL> list[2] = 36.5

IDL> PRINT, list

46

36.5000

12

3  4  5


리스트내의 특정 위치의 원소값들만 추출하여 또 다른 리스트를 만들 수도 있습니다.


IDL> newlist = list[[0, 2]]

IDL> PRINT, newlist

gamma

36.5000

IDL> newlist = list[1:3]

IDL> PRINT, newlist

46

36.5000

12


다음과 같이 (=)를 사용하여 기존의 리스트를 카피할 수도 있습니다.


newlist = list


주의할 점은, 이러한 경우 newlist와 list는 동일한 리스트로 취급됩니다. 따라서 둘 중 하나의 리스트에 대하여 변경을 가하면 그 변경사항은 나머지 하나의 리스트에도 그대로 적용된다는 점을 기억해야 합니다.


IDL> newlist[2] = 93

IDL> PRINT, newlist

46

93

12

3  4  5

IDL> PRINT, list

46

93

12

3  4  5


따라서 만약 list와 똑같은 구성원소들을 갖되 독립적인, 즉 변경사항이 똑같이 적용되지 않는 새로운 리스트를 만들려면 다음과 같이 (*) 기호를 사용하면 됩니다.


IDL> newlist = list[*]

IDL> newlist[2] = 328

IDL> PRINT, newlist

46

328

12

3  4  5

IDL> PRINT, list

46

93

12

3  4  5


지금까지 2회에 걸쳐 리스트라는 자료형에 대한 전반적인 특성들을 알아보았습니다. 아마도 IDL 프로그래밍에 있어서 폭넓게 사용될 수 있을만한 새로운 자료형이라는 생각이 들어서 이렇게 소개해봤습니다. 다음번에는 또 다른 새로운 자료형인 HASH에 대하여 알아보기로 하겠습니다.


* 이 글은 idluser.org 사이트의 IDL Tip 게시판의 118번 게시물로도 보실 수 있습니다.

반응형