본문 바로가기
프로그래밍/파이썬 공부하기

Python 공부 - 1 (자료형)

by _OlZl 2024. 1. 21.

2024.01.21 - [프로그래밍/파이썬 공부하기] - 파이썬 공부하기 - 0 (시작)

 

파이썬 공부하기 - 0 (시작)

학교에서 1년 동안 C를 배웠습니다. C를 배우며 컴퓨터 언어의 기본적인 요소에 대해서도 잘 알게 됐고, C도 잘 다룰 수 있게 되었으나 대회나 여러 행사 등에서는 파이썬을 쓸 일이 더욱 많았습

olzl07.tistory.com

저번에는 파이썬을 공부하기로 계획해보았고, 지금부터 파이썬 공부를 본격적으로 시작해볼겁니다.

사실 파이썬을 시작하면 가장 기본적으로 여러 자료형이나, 변수, 연산자, if문 이런 것부터 하는 게 정석이지만 사실 전 이미 이런 간단한 건 거의 다 꿰고 있습니다. (코드업을 풀면 파이썬 실력이 많이 늡니다. 여러분 코드업 하세요.) 그래서 그냥 이런 간단한 건 제가 잘 이해하지 못했던 부분이나 딱히 쓸 일이 없어서 잘 알아두지 않았던 것들만 조금 정리해보려 합니다. (함수를 중점으로 진행할 듯 합니다.)


자료형

가장 먼저 자료형입니다. 사실 파이썬에선 변수를 선언할 때 자료형을 딱히 선언하지 않습니다. 이것 땜에 C를 쓰다 처음 파이썬을 쓸 때 굉장히 놀라웠던 기억이 있네요. 암튼 파이썬에서 자료형에는 크게 다음과 같은 종류들이 있습니다.

수치 자료형 불 자료형 군집 자료형

 

수치 자료형은 말 그대로 int, float 등 일반적인 숫자 자료형입니다. 여기에 관해선 따로 언급하지 않겠습니다. 이 정도는 다 알죠?

불 자료형은 boolean 값을 저장하는 건데, 이것도 크게 언급하지는 않겠습니다. 대충 True랑 False가 있다고 알면 됩니다.

마지막으로 군집 자료형이 좀 중요하기도 하고 어렵기도 합니다. 군집 자료형에는 문자열(str), 리스트(list), 튜플(tuple), 딕셔너리(dictionary) 등이 있습니다. 이 중 리스트, 튜플, 딕셔너리는 이후에 따로 공부해볼 것이기 때문에 여기서 다루지 않고 문자열(str)만 다뤄보겠습니다.


문자열(str)

str은 문자열, 즉 글자를 위한 자료형입니다. C에서는 배열에 char형들을 저장함으로써 문자열을 구현했다면, 여기서는 그냥 " "를 이용해 문자열을 만들 수 있습니다. 문자열의 덧셈, 곱셈 등에 대한 건 생략하겠습니다. 

여러 줄을 가지는 문자열을 만들 때는 ''' ''', """ """등 큰 따옴표나 작은 따옴표 3개씩을 이용해 구현할 수 있습니다.

str1 = """
_OlZl
tistory
"""

str2 = '''
_OlZl
tistory
'''

 

문자열에는 인덱스라는 게 존재합니다만 자세한 설명은 생략하겠습니다. (이 정도는 구글링.. 할 수 있잖아요..?) 암튼 이 인덱스를 활용해 문자열 슬라이싱이란 것이 가능합니다. 대충 문자열 내의 몇번째 요소부터 몇별째 요소까지 잘라내는 거다~ 정도로 이해하면 될 것 같습니다.

변수[a:b]
실행시 문자열의 a 인덱스부터 b-1 인덱스까지(b 전 인덱스까지)를 잘라냅니다.
str = 'abcd efgh'
print(str[0])
print(str[1:5])
print(str[:])
print(str[3:])
print(str[:3])
a
bcd
abcd efgh
d efgh
abc

시작 인덱스 자리에 아무것도 넣지 않으면 맨 처음부터, 종료 인덱스 자리에 아무것도 넣지 않으면 맨 끝까지로 판단합니다.


문자열 관련 함수

문자열과 관련해 쓸 수 있는 함수가 여러 가지 있는데 그 중 몇 가지를 정리해보았습니다.

여기부터는 무수한 함수들의 나열이므로 대충 대충 읽진..... 말고 잘 읽어보세요. 이 글 중 제일 중요한 부분입니다.

  • 문자열.find(찾을 값, 시작 인덱스, 종료 인덱스) : 시작 ~ 종료 인덱스 사이에서 찾을 값이 가장 먼저 나오는 인덱스를 반환
  • 문자열.index(찾을 값, 시작 인덱스, 종료 인덱스) : 시작 ~ 종료 인덱스 사이에서 찾을 값이 가장 먼저 나오는 인덱스를 반환
  • 차이점 : find = 찾을 값이 범위 내에 없으면 -1 반환, index = 찾을 값이 범위 내에 없으면 Error 발생
str = 'abcdefg'
print(str.find('c'))
print(str.find('cde'))
print(str.find('c', 3, 5))

str = 'abcdefg'
print(str.find('c'))
print(str.find('cde'))
2
2
-1

2
2

 

  • 문자열.split(구분자) : 문자열을 구분자를 기준으로 하여 나눔 (이후 리스트로 출력)
  • 구분자.join(문자열 or 리스트) : 문자열 or 리스트의 모든 요소 사이에 구분자를 추가함
str = 'ab,c d,e fgh'
print(str)
print(str.split())
print(str.split(' '))
print(str.split(','))
print(str.split('d'))

str = 'ab cde'
print(' '.join(str))
print("/".join(str))
str = ['a', 'b', 'c', 'd', 'e']
print(",".join(str))
ab,c d,e fgh
['ab,c', 'd,e', 'fgh']
['ab,c', 'd,e', 'fgh']
['ab', 'c d', 'e fgh']
['ab,c ', ',e fgh']

a b   c d e
a/b/ /c/d/e
a,b,c,d,e

 

  • 문자열.replace(기존 값, 변경할 값, 변경횟수) : 변경횟수 만큼 기존 값을 변경할 값으로 대체함
  • 문자열.upper() : 알파벳 소문자를 대문자로 변환하여 반환함
  • 문자열.lower() : 알파벳 대문자를 소문자로 변환하여 반환함
str = 'a,b,c,d,e'
print(str)
print(str.replace(',', '/'))
print(str.replace(',', '/', 2))

str = 'a,b,C,D,e'
print(str.upper())
print(str.lower())​
a,b,c,d,e
a/b/c/d/e
a/b/c,d,e

A,B,C,D,E
a,b,c,d,e

 

  • 문자열.strip(제거할 값) : 양쪽 끝에서 특정 값을 제거함
  • 문자열.lstirp(제거할 값) : 왼쪽 끝에서 특정 값을 제거함
  • 문자열.rstirp(제거할 값) : 오른쪽 끝에서 특정 값을 제거함
str = '     abc     '
print(str.strip())
print(str.lstrip())
print(str.rstrip())

str = '**** abc ***'
print(str.strip('*'))
print(str.lstrip('*'))
print(str.rstrip('*'))

str = '12321ab123c111'
print(str.strip('123'))
print(str.lstrip('123'))
print(str.rstrip('123'))
abc
abc     
     abc
     
 abc 
 abc ***
**** abc 

ab123c
ab123c111
12321ab123c

처음 딱 보면 이게 뭐지 싶을 수도 있지만 (전 그랬습니다) 좀만 생각해보면 은근 쉽습니다. 그냥 왼쪽 끝이든 오른쪽 끝이든 괄호에 나온 값 중 하나가 아닐 때까지 제거하는 겁니다. 

그래서 ab와 c 사이에 껴있는 123가 살아있는 것이겠죠.

 

  • 문자열.zfill(정수) : 문자열의 길이가 지정된 정수가 될 때까지 문자열 왼쪽에 0을 채움
  • 문자열.rjust(정수, 원하는 값) : 문자열의 길이가 지정된 정수가 될 때까지 문자열 왼쪽에 원하는 값을 채움
  • 문자열.ljust(정수, 원하는 값) : 문자열의 길이가 지정된 정수가 될 때까지 문자열 오른쪽에 원하는 값을 채움
    • (왜 얘네는 r이 왼쪽이고 l이 오른쪽인걸까요.... 살짝 킹받는다)
str = 'abc'
print(str.zfill(10))

str = 'abc'
print(str.rjust(10, "7"))
print(str.ljust(10, "7"))
0000000abc

7777777abc
abc7777777

 

 

      • 문자열.count() :부분 문자열이 나타나는 횟수
      • max(문자열) : 입력된 컬렉션 또는 여러 인자 중 가장 큰 수
      • min(문자열) : 입력된 컬렉션 또는 여러 인자 중 가장 작은 수
      • ord(문자) : 입력된 문자의 유니코드 값
      • chr(숫자) : 입력된 수의 문자 값
url='judge.codingpanda.kr'
print(url.find('.kr'))
print(url.count('.'))
print(ord(max(url)))
print(ord(min(url)))
print(chr(46))
17
2
117
46
.

사실 부정적분 공식 외우기도 힘든 제가 이걸 다 외울 것 같지는 않지만.... 그래도 비교적 쓸 일이 있어보이는 함수들을 정리해봤습니다. 자료형이나 이런 간단한 건 다 건너뛰고 빨랑 넘어가고 싶었으나 생각보다 문자열 관련 함수가 많아서 분량이 길어졌네요. 더 이상 쓰기는 귀찮은 관계로 (현 시각 오전 1시 41분) 이번에는 자료형까지만 해보겠습니다.