카테고리 없음

[네이버 부스트코스] 프로그래밍 기초 (ft.파이썬)7차시: 자료구조 (문자열, 집합, 사전)

닉네임이 멋이 중헌디 2021. 2. 5. 20:25

1.문자열과 집합

2. 사전 

 

#1.문자열과 집합 

문자열 서식화

 

문자열을 출력할 때 여러 변수의 값을 이용해야 하는 경우가 있습니다.

 

print("Max between " + str(x0) + " and " + str(x1) + " is " + str(val))

 

문자열 포맷 연산자 %를 사용하면 더 쉽고 간단하게 문자열을 출력할 수 있습니다.

 

print("Max between %d and %d is %g" % (x0, x1, val))

 

포맷 연산자는 다음처럼 사용합니다.

 

format_string % (arg0, arg1, .... )

 

포맷 연산자가 사용하는 튜플의 원소들이  format_string 안의 문자열 포맷코드들의 값에 일대일로 지정됩니다. 자료형에 따라 다른 문자열 포맷코드를 사용합니다.

  * %d: 10진법 정수

  * %g: 실수

  * %.2f: 소수점 자리수가 설정된 실수 (이 경우는 소숫점 둘째 자리까지)

  * %s: 모든 자료형 (문자열 등)

  

하나의 문자열 포맷 코드만 사용하는 데는 튜플을 쓰지 않아도 됩니다.

 

print("Maximum is %g" % val)

 

각 문자열 포맷 코드가 나타낼 문자열이 차지하는 영역의 크기를 설정할 수 있습니다.

 

 

다음처럼 문자열 포맷 코드가 나타낼 문자열을 왼쪽으로 정렬시킬 수도 있습니다.

 

 

 

문자열

 

문자열은 시퀀스입니다.

 

def is_palindrome(s):

    for i in range(len(s) // 2):

           if s[i] != s[len(s) - i - 1]:

                  return False

           return True

 

문자열은 불변 객체입니다.

문자열에는 in 연산자를 사용할 수 있습니다.

 

 

리스트와 튜플에서는 in 연산자가 리스트/튜플의 원소를 대상으로 하지만, 문자열에서는 부분 문자열을 대상으로 합니다.

 

 

문자열의 멤버 함수

 

문자열 객체에서는 다음과 같은 멤버 함수를 사용할 수 있습니다.

  * upper(), lower(), capitalize()

  * isalpha(), isdigit()

  * startswith(prefix), endswith(suffix)

  * find(str1), find(str1, start), find(str1, start, end)

  * replace(str1, str2)

  * rstrip(), lstrip(), strip()

  * split(), split(sep)

  * join(list1)

 

모든 멤버 함수는 Python에서 제공하는 문서에도 설명되어 있습니다.

 

 

집합

 

집합(Set)은 수학의 집합과 관련된 자료들을 쉽게 처리하기 위한 자료 구조입니다.
집합은 서로 다른 여러 객체들로 이루어져 있습니다 (중복된 자료가 없습니다).
집합은 중괄호 { } 나 set() 함수를 이용해서 만들 수 있습니다.

=> {}는 사전이므로 빈 집합은 set()

 

리스트는 집합으로 변환할 수 있습니다.

 

 

문자열 또한 집합으로 변환할 수 있습니다.

 

 

집합의 원소에는 순서가 없기 때문에 원소의 위치를 특정할 수 없습니다.

 

 

하지만, in 연산자는 사용할 수 있습니다.

 

 

 

집합의 멤버 함수

 

집합 객체 s에는 다음과 같은 멤버 함수들을 사용할 수 있습니다.

 

  * s.add(v): 원소 v를 집합 s에 추가한다.

  * s.remove(v): 원소 v를 집합 s에서 제거한다.

  * s.pop(): 무작위 원소를 집합 s에서 제거하고 그 원소를 반환한다.

  * s.intersection(k): 집합 s, k의 공통 원소를 반환한다. (s∩k)

  * s.union(k): 집합 s, k의 합집합을 반환한다. (s∪k)

  * s.difference(k): 집합 k에 있는 원소들을 s에서 제거한다. (s∩k^c)  (s-k)

 

다음은 멤버 함수들의 사용 예시입니다.

 

 

#2. 사전

 

사전(Dictionary) 또한 Python에서 유용하게 쓰일 수 있는 자료 구조입니다.

 

사전은 리스트나 집합처럼 여러 객체를 모아서 만든 객체입니다.
다른 자료 구조와의 가장 큰 차이점은, 다양한 종류의 불변 객체를 사용해서 자료에 접근(다양 객체로 인덱싱 가능)할 수 있다는 점입니다

(예. 숫자, 문자열을 사용해서 자료에 접근이 가능).

 

사전에서 사용되는 인덱스는 (key) 라고 부르고, 키가 가리키는 대상 객체는 (value) 이라고 부릅니다. 키와 값의 쌍을 key-value pair라 합니다.

 

사전은 중괄호 { }나 dict() 함수를 이용해서 만들 수 있습니다.

 

 

사전의 원소들에는 순서가 없습니다.

사전의 원소에는 키로만 접근할 수 있습니다.

 

 

다음과 같이 사전에 새로운 키와 값을 넣을 수 있습니다.

 

 

다음처럼 키가 가리키는 값을 바꿀 수도 있습니다.

 

 

 

사전 관련 함수들

 

사전 객체 d는 다음과 같은 함수들과 연산자들을 사용할 수 있습니다.

  * len(d): d의 원소의 수를 반환한다.

  * key in d: d가 key를 가지고 있으면 True를, 아니면 False를 반환한다.

  * d.get(key, default=None): d에서 key가 가리키는 값을 반환한다.
     d가 key를 가지고 있지 않으면 default 값을 반환한다.

  * d.keys(): d의 모든 key 객체 목록을 반환한다.

  * d.values(): d의 모든 value 객체 목록을 반환한다.

  * d.items(): d의 모든 key-value pair 목록을 반환한다.

  * del d[key]: key에 해당하는 key-value pair를 사전 d에서 제거한다.

 

keys(), values(), items()로 반환되는 객체는 리스트 객체가 아닙니다.

 

이 객체들은 리스트처럼 원소들을 가지고 있지만, 객체를 변경할 수는 없습니다.
(예. append()와 같이 원소를 추가할 수 없습니다.)

 

다음은 함수들의 사용 예시입니다.

 

 

 

 

사전과 반복문

 

반복문과 in 연산자를 사용하면, 사전의 키들에 해당하는 값들을 찾을 수 있습니다. 

 

 

반복문과 items() 함수를 사용하면 key-value pair들을 찾을 수 있습니다.

 

 

 

리스트, 집합, 사전

 

언제 어떤 자료 구조를 사용하면 좋을까요?

  * 순서가 있는 객체들을 다룰 때
     -> 리스트 자료 구조

  * 순서가 없는 객체들을 다룰 때
     -> 집합 자료 구조

  * 키를 통해 키가 가리키는 값을 쉽게 찾고 싶을 때
     -> 사전 자료 구조

 

리스트보다 집합에서 원소의 포함 여부를 더 빠르게 계산할 수 있습니다.

=> 순서가 없으니까

 

import time

large_list = list(range(10000000))

large_set = set(large_list)

st = time.time()

for num in range(100000):

    if num not in large_list:

         print("What?!")

         print("Running time for list: %f sec" % (time.time() - st)) st = time.time()

 

for num in range(100000):

      if num not in large_set:

         print("What?!")

         print("Running time for set: %f sec" % (time.time() - st))