Python : 컬렉션(리스트, 튜플)

컬렉션

  • 여러 개의 값을 모아서 저장하는 데이터 타입

리스트

  • 컬렉션의 대표적인 예는 리스트이다.
  • 자료의 집합
    • 변수는 하나의 값만 저장한다.
    • 리스트는 여러개의 값을 집합으로 저장한다.
    • [] 괄호 안에 요소를 콤마로 구분하여 나열한다.
  • 리스트는 여러가지 면에서 문자열과 유사하다.
    • 문자열 또한 문자를 모아 놓은 일종의 리스트이다.
  • 리스트는 값을 변경 할 수 있다.
    • 문자열은 값을 변경 할 수 없다.
  • 리스트의 선언 방법은 []괄호 안에 콤마로 구분하여 나열 한다.
    member = ["손오공", "저팔계", "사오정", "삼정법사"] 
    print(member)
    

리스트 컴프리헨션

  • 리스트 안의 요소가 일정한 규칙을 가지는 수열이라면 아래 문법으로 만들 수 있다.
  • [] 괄호 안에 for 문, if 문 이 포함되어 있다. (if 조건은 필요 없을 시 생략 가능)

1에서 10까지 순회하며 그 2배되는 값을 리스트로 만들어 보는 예제

nums = []
for n in range(1, 11):
  nums.append(n * 2)
  
# 컴프리헨션 사용
nums = [n * 2 for n in range(1,11)]

리스트 요소 추가

nums = [1, 2, 3, 4]
nums.append(5)  # 5를 추가한다 [1, 2, 3, 4, 5]
nums.insert(2, 99)  # 2번째 인덱스에 99를 추가한다. [1, 2, 99, 3, 4]
print(nums)

리스트 요소 삭제

  • 요소를 삭제할 때는 삭제하는 대상에 따라 방법이 달라진다.
    • remove : 인수로 전달 받은 값에 해당하는 요소를 삭제 할 때 사용한다.
    • del : 특정 인덱스에 해당하는 요소를 지울 수 있다.
    • [] : 특정 범위를 [] 값으로 대입하면 범위를 지울 수 있다.
    • pop : 마지막 요소를 반환하고 리스트에서 지운다.

리스트 요소 삭제 예제

score = [88, 95, 70, 100, 99, 80, 78, 50]
score.remove(100) # 0번 인덱스에서 제일 처음 나오는 100을 삭제
del score[2]  # 2번 인덱스에 해당하는 요소를 삭제 (70 삭제)
score[1:4] = [] #1번 인덱스부터 3번인덱스 까지 삭제
print(score.pop())  # 마지막 인덱스를 리턴하고 삭제

리스트 요소 검색

  • 리스트의 검색 메서드는 문자열의 경우와 거의 같다
    • index : 해당하는 요소에 해당하는 인덱스를 찾아준다.
    • count : 특정 요소의 개수를 조사한다.
    • len, min, max 내장 함수를 사용할 수 있다.
    • in, not in 연산자를 사용할 수 있다.

사용자에게 입력 받은 요소를 검사하는 예제

ans = input("결제 하시겠습니까? ") 
if ans in ['yes', 'y', '예', 'ok']:
  print("결제 완료 되었습니다.")
else:   
  print("안녕히 가세요."

리스트 요소 정렬

  • 정렬은 요소의 크기순으로 재배열 하는 것이다.
    • sort : 요소의 순서를 정렬 할 수 있다.
    • reverse : 요소의 순서를 만대로 만든다
    • sorted(내장함수) : 원본을 변경하지 않고 정렬한 새로운 리스트를 반환한다.

튜플

  • 튜플은 리스트와 비슷하지만 값을 변경 할 수 없다.
  • 초기화한 후 편집할 수 없다.
  • 상수 리스트라고도 부른다.
  • 정의할 때는 ()괄호를 사용한다.
    • 괄호없이 나열 했을 때도 튜플로 본다.
member = ("손오공", "저팔계", "사오정", "삼정법사")
print(member)
  • 속도와 메모리 사용 차이가 있다.
    • 리스트는 변경의 가능성을 대비해 더 많은 메모리를 사용한다.
    • 변경 가능성이 없어 내부 구조가 단순해 속도가 더 빠르다.
  • 안정적이다.
    • 단순히 참조만 하면 되는 값은 튜플로 받는것이 더 안정적이다.
score = (88, 95, 70, 100, 99) # 튜플정의
score1 = 88, 95, 70, 100, 99 # 괄호 없는 튜플
tuple_value = 2, # 값이 하나인 튜플

print(score[3]) # 리스트와 같은 접근이 가능하다
print(score[1:4])
print(score[:4])
print(score + (6, 7)) # 튜플 맨뒤에 6, 7의 요소가 추가 된다.

print(score * 2)  # 튜플의 요소값이 2배가 되는 것이 아니고 요소가 2배로 늘어 나는것 
# [88, 95, 70, 100, 99, 6, 7, 88, 95, 70, 100, 99, 6, 7]

tuple_value[1] = 100            # TypeError 
del tuple_value[1]                # TypeError
# 튜플의 요소를 변경하거나 삭제할 수 없다.

튜플과 리스트의 호환

# 튜플과 리스트는 서로 변경할 수 있다.
score = [88, 95, 70, 100, 99]
tu = tuple(score)
print(tu)

li = list(tu)
li[0] = 100
print(li)

튜플 언패킹(Unpacking)

  • 튜플은 여러개의 변수에 값을 한번에 대입하는 기능을 제공한다.
  • 좌변에 변수 목록을 적고 우변에 튜플을 대입하면 튜플의 요소가 하나씩 변수에 대입된다.
    • 단, 좌변의 갯수와 튜플의 요소 개수는 같아야한다.

튜플 언패킹 예제

member = ("이순신", "김유신", "강감찬")
lee, kim, kang = member 
print(lee)
print(kim) 
print(kang)

댓글남기기