5장 리스트


* 리스트 생성

  - 형식 : [리스트명] = [[값], [값], [값], ...]
    + 리스트명 : 일반 변수명과 똑같이 사용한다.
    + 값 : 값은 여러가지 타입이 혼합되어 사용될 수 있으며, 각각의 값들은 콤마(,)로 구분되어 진다. 
    -> tip : 문자열 리스트를 만들기 위해 다음과 같이 split메소드를 이용해 배열을 만든다.
      (code) strlist = 'str1 str2 str3 str4 str5'.split()      

* 리스트 값 접근
  - 형식 : [리스트명][[index]]
    + index : 리스트에 접근하려는 번호를 쓰면 된다. 다른 언어와 같이 리스트가 가진 범위를 벚어나는 인덱스를 넣으면 오류가 발생한다. 시작은 0부터이다.
    
* 리스트 값을 거꾸로 접근하기
  - 설명 : 일반 리스트 값 접근 방식에서 인덱스에 음수를 넣어 접근한다. 시작은 -1부터이다.
  
* 리스트 관련 내장 함수
  - len(L) : 리스트에 들어있는 항목 수
  - max(L) : 리스트에 들어있는 항목의 최대값
  - min(L) : 리스트에 들어있는 항목의 최소값
  - sum(L) : 리스트에 들어있는 항목의 합
    -> sum의 경우 모든 항목이 숫자로 이루어져야 동작한다.

* 리스트 관련 메소드
  - L.append(v) : v값을 L리스트에 추가한다.
  - L.insert(i, v) : v값을 L리스트의 i인덱스에 추가한다.
  - L.remove(v) : L리스트에서 처음나오는 v값을 제거한다.
  - L.reverse() : L리스트의 순서를 반대로 바꾼다.
  - L.sort() : L리스트의 순서를 정렬한다.
  - L.pop() : L리스트의 마지막 항목을 제가한 후 반환한다.
  
  => pop를 제외하고, 모든 메소드는 None라는 특별한 값을 반환한다. None는 파이썬에서 '아무것도 없음'을 의미한다.
  
* 리스트 연산
  - [리스트명] + [리스트명] 과 같이 더하기(+) 연산자를 이용해 리스트를 연결할 수 있다.
    (code) ['a','b'] + ['c'] => ['a', 'b', 'c']
  - [리스트명] * [숫자] 과 같이 곱하기(+) 연산자를 이용해 리스트를 반복할 수 있다.
    (code) ['a','b'] * 2 =>  ['a','b', 'a','b']    

* 리스트의 부분 집합 가져오기(Slice)
  - 설명 : 리스트에서 특정 인덱스의 값만 취하고 싶을때 사용한다.
  - 형식 : [리스트명][[시작index]:[종료index]]
    + 시작index : 리스트를 가져올 최초 index 값이다. 값을 생략할 수 있으며, 생략하면 0이 기본값으로 설정된다.
    + 종료index : 리스트를 가져올 마지막 index 값이다. 값을 생략할 수 있으며, 생략하면 마지막 index 값이 기본값으로 설정된다.
  -- 샘플 
 list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
         list[:2]  => ['a', 'b']
         list[1:2] => ['b']
         list[4:]  => ['e', 'f', 'g']
         
  ** TIP : 문자열도 리스트에서 부분 집합을 가져오는 방법으로 부분 문자열을 가져올 수 있다. 파이썬에서 문자열은 문자의 리스트와 같이 취급 된다.
 

* 별칭(alias)
파이썬에서는 두 변수가 동일한 값을 가리킬 때 별칭을 가진다고 한다. 예를 들면 하나의 리스트를 생성해 두개의 변수의 할당하면, 리스트에 접근점이 두개가 된다는 것과 같다. 이 내용은 함수로 객체를 넘겼을 때 call by reference를 설명하기 위해 나온 것 같다.

* 중첩 리스트
리스트에는 어떤 타입의 데이터도 담을 수 있다. 즉, 리스트 안에 리스트를 담을 수 있다는 것이다. 
  - 샘플 
      duplist = [['Canada', 76], ['United States', 75], ['Mexico', 71]]      

* 다른 시퀀스 타입
  - 설명 : 순서가 있는 데이터(sequence)에는 리스트말고도 다른 것이 존재 한다. 순서가 있는 데이터(sequence)라는 말은 인덱스로 참조 가능하며 리스트처럼 슬라이싱해 새로운 문자열을 생성할 수 있다는 것이다. 
  - 시퀀스 타입 : 
    1) 문자열 : 문자의 불변 시퀀스
    2) 튜플 : 리스트의 불편 시퀀스 형식, 괄호를 이용해 생성하며, 리스트 처럼 사용가능하다. 한번 생성한 튜플은 변경할 수 없다.
      - 샘플 
        >> bases = ('A', 'C', 'G')
        >> for t in bases : 
        ..  print t
        A
        C
        G
        >> bases[0] = bases[1]
        에러 발생
      - 튜플을 사용하는 이유 : 특정 연산을 안전하게 만들어 주기 때문이라는데, 파이썬에 자바에는 final과 같은 연산자가 없어서 그런 것 같다.
      
* 파일을 리스트로
  - 설명 : 파일을 open 함수를 이용하면, 파일 객체를 사용할 수 있다. 이 객체를 for 루프에서 사용하면 파이썬은 자동으로 readline을 호출해 준다.
  
  - 샘플 :
    + data.txt
    Mer
    Venu
    Ea
    
    + code
    >> data = opne('data.txt', 'r')
    >> for line in data :
    ..   print len(line)
    4
    5
    3
  
  - 주의점 : readline은 개행 문자를 포함하고 있어 의도하지 않은 결과를 만들 수 있기 때문에 문자열의 strip() 메소드를 이용해 개행 문자를 제거해 줘야 한다.
  
* 커맨드라인 인자
  - 설명 : 파이썬에서는 자바 main함수를 호출할때 arg 변수에 인자를 얻을 수 있는 것처럼 인자를 받는 방법을 제공한다. 이는 sys이라는 모듈의 argv라는 리스트 변수에 저장된다. 첫번째 인자에는 프로그램명이 들어가고, 그 이후에 인자가 저장된다.
  
    sys.argv : 커맨드라인 인자가 저장되는 리스트 변수
    sys.argv[0] : 실행 프로그램명
    sys.argv[1]~[n] : 커맨드라인 인자


Posted by 빌리 :