파이썬 기초(9)

2024. 9. 22. 16:02python study/프로그래밍1

문자열

  • 문자들이 열렬로 묶여 있는 것을 의미한다.
  • 문자열 상수는 작은따옴표나 큰 따옴표 사용
s="abcdefg"
s1='seojun'

원시 문자열

  • r을 따옴표 앞에 두어서 이스케이프 문자를 무시하고 출력할 수 있다.
이스케이프 문자
백슬래시( \ ) 문자를 사용하여 의미를 지워 준다.
  • 예를 들어서 \' 를 사용하게 된다면 따옴표가 가지는 기능을 무시해 준다.
  • 하지만 r을 붙인다면 이스케이프 문자의 기능을 무시하고 문자열 전체를 출력해 준다.
print('abcd\'seojun')
print(r'abcd\'seojun')
abcd'seojun
abcd\'seojun
r: 문자열의 이스케이프 기능 무시
이스케이프 문자( \ ): 문자열 내부에서 따옴표와 같은 문자 앞에 붙어서 기능을 무시

인덱싱&슬라이싱

  • 문자열도 리스트와 같은 자료구조에 속하게 된다.
  • 리스트의 와 동일한 방식으로 인덱싱과 슬라이싱이 가능하다.
s="abcdefgh"
print(s[1])
print(s[-2])
print(s[0:3])
print(s[-3:-1])
b
g
abc
fg

 

  • s [1]: 2번째 문자(리스트는 0번째 인덱스부터 시작)
  • s [-1]: 역방향에서 1번째 문자
  • s [0:3]: 0~2번째
  • s [-3:-1]: -3~-2번째
cf) 문자열은 문자를 변경할 수 없기 때문에 인덱싱을 통해 문자를 변경할 수 없다.
s="abcdefgh"
s[0]='A'
  File "/home/main.py", line 2, in <module>
    s[0]='A'
TypeError: 'str' object does not support item assignment
인덱싱: s [index]로 사용
슬라이싱: s[ n1 : n2 ]는 n1부터 n2-1까지를 의미 

in과 not in 

  • s1 in s2: s1이 s2에 있으면 True
  • s1 not in s2: s1이 s2에 없으면 True
s="abcdefgh"
print('a' in s)
print('b' not in s)
True
False

% s

  • % s는 문자열 내에 두고 % 뒤에 등장하는 값으로 변경
  • f-string에서 주로 사용
s1="abc"
s2="def"
print("%s와 %s는 다르다."%(s1,s2))
abc와 def는 다르다.
  • 위의 코드와 같이 여러 개의 % s를 문자열에 넣는다면 뒤에 나오는 %를 괄호로 묶어준다.

f-string

  • 파이썬 3.6부터 활용됨
  • 문자열 앞에 f를 붙임
  • 문자열 안에 중괄호를 사용하고 그 괄호 안에 문자열을 넣음
s1="abc"
s2="def"
print(f"{s1}와 {s2}는 다르다.")
abc와 def는 다르다.
s1 in s2: s1이 s2안에 있으면 True
s1 not in s2: s1이 s2안에 없으면 True
%s 활용법: "% s" % 문자열
f-string: f"{문자열}"

문자열 비교

기호 의미
a<b a보다 b가 사전순으로 뒤에 있으면 True
a>b a보다 b가 사전순으로 앞에 있으면 True
a!=b a와 b가 다르면 True
a==b a와 b가 같으면 True
s1="abc"
s2="def"
print(s1<s2)
print(s1>s2)
print(s1!=s2)
print(s1==s2)
True
False
True
False

대소문자 변환하기 및 검사

  • s.lower(): s문자열을 소문자로 변환
  • s.upper(): s문자열을 대문자로 변환
s1="AbCd"
print(s1.lower())
print(s1.upper())
abcd
ABCD
  • s.islower(): s가 알파벳이 소문자로만 이루어져 있으면 True
  • s.isupper(): s가 알파벳이 대문자로만 이루어져있으면 True
  • s.isalpha(): 알파벳으로만 이루어져 있으면 True
  • s.isalnum(): 알파벳과 숫자만으로만 이루어져 있으면 True
  • s.isdecimal(): 숫자로만 이루어져 있으면 True
  • s.isspace(): 줄 바꿈, 공백,  탭 등으로 이루어져 있으면 True
s1="abcd"
print(s1.islower())
s2="ABCD"
print(s2.isupper())
s3="abc/"
print(s3.isalpha())
s4="ab12"
print(s4.isalnum())
s5="1234"
print(s5.isdecimal())
s6="\n\t "
print(s6.isspace())
True
True
False
True
True
True

startswith()와 endswith()

  • s.startswith( c ): c로 s문자열이 시작된다면 True
  • s.endswith(c): c로 s문자열이 끝나면 True
s="abcd"
print(s.startswith('a'))
print(s.endswith('d'))
True
True

split()

  • 문자열이 띄어쓰기, 콤마 등으로 분리되어 있으면 이를 리스트 형식으로 분리해 준다.
  • s.split('문자'): 문자를 중심으로 s 문자열에 있는 단어를 분리해 줌
  • 예제 1
s="abkcdkefkgf"
print(s.split('k'))
['ab', 'cd', 'ef', 'gf']
  • 예제 2
s = """ab
       cd
       ef
       gf"""
print(s.split("\n"))
['ab', 'cd', 'ef', 'gf']

join()

  •  문자열을 하나로 결합할 때 사용한다.
  • 문자. join(리스트): 리스트에 있는 문자(문자열)를 문자를 사이에 두면서 결합한다.
  • 예제 1
s=['ab','cd','ef']
print(','.join(s))
ab,cd,ef
  • 예제 2
s='2024,09,22'
print('-'.join(s.split(',')))
2024-09-22
  • 예제 1처럼 리스트에서 콤마를 중심으로 문자열 하나로 만들 수도 있고 예제 2처럼 문자열에서 바로 split을 활용하여 분리해 준 다음 join을 해주어도 상관없다.

strip()

  • strip(): 왼쪽 오른쪽 끝 공백 문자를 제거하고 문자열 반환
  • lstrip(): 왼쪽 끝의 공백 문자 제거
  • rstrip(): 오른쪽 끝의 공백 문자 제거
s="   hello world  "
print(s.strip())
print(s.lstrip())
print(s.rstrip())
hello world
hello world  
   hello world
  • 특정 문자를 제거하고 싶으면 괄호 안에 문자를 넣으면 된다.
s="####hello world$$$#"
print(s.strip('#$'))
print(s.lstrip('#$'))
print(s.rstrip('#$'))
hello world
hello world$$$#
####hello world

ord()와 chr()

  • ord(): 문자를 아스키코드 값으로 바꿔 주거나 알파벳이 아니면 유니코드 값으로 변경해 준다.
s='a'
s1='나'
print(ord(s))
print(ord(s1))
97
45208
  • chr(): 숫자값을 문자로 바꾸어 준다.
print(chr(97))
print(chr(44032))
a
가

찾기, 바꾸기

  • s.find(문자): 앞에서부터 탐색을 하고, 문자가 어느 위치에 있는지 찾아서 인덱스(위치)를 출력
  • 제일 먼저 등장하는 문자의 인덱스를 출력
  • 만약 없다면 -1 출력
s='junsung.py'
print(s.find('sung'))
3
  • s.rfind(문자): 뒤에서부터 탐색을 하고, 문자가 어느 위치에 있는지 찾아서 인덱스(위치)를 출력
s='tell me tell me tell me'
print(s.rfind('tell'))
16
  • s.count(c): s 문자열에서 c 문자의 개수를 출력해 준다.
s='tell.me.tell.me.tell.me'
print(s.count('.'))
5
  • s.replace(a, b): s문자열에 있는 a를 b로 바꾸어 준다.
s='tell.me.tell.me.tell.me'
s=s.replace('tell','help')
print(s)
help.me.help.me.help.me

예시

  • North Atlantic Treaty Organization의 단어의 맨 앞 문자를 가져와서 NATO를 출력해 보기
s='North Atlantic Treaty Organization'
s_list=s.split(" ")
for i in s_list:
      print(i[0],end='')

정규식

  • 특정한 규칙을 가지고 있는 문자열들을 표현하는 수식
기능 설명
^ 시작 문자열의 시작
$ 문자열의 끝
. 문자 한 개의 문자와 일치
\d 숫자 한 개의 숫자와 일치
\w 문자와 숫자 한 개의 문자나 숫자와 일치
\s 공백 문자 공백, 탭, 줄바꿈, 캐리지리턴 문자와 일치
[] 문자 종류, 범위 [abc]는 a또는 b또는 c를 나타냄.
[a-z]는 a부터 z까지 중 하나를 의미
[1-9]는 1부터 9까지 중 하나를 의미
  • abcde: 정확히 abcde와 일치해야 함
  • . : 한자리 문자
  • \d\d\d: 3자리 숫자
  • \w: 한자리 숫자나 문자
수량 한정자 기능 설명
* 0회 이상 반복 " a* "는 "","a","aa","aaa' ....
+ 1회 이상 "a+"는 "a","aa","aaa" ....
? 0또는 1회 "a?"는 "", "a"
{n} n회 "a{2}"는 "aa" 
{n,m} n회 이상 m회 이하 "a{1,3}"는 "a","aa","aaa"
(ab) 그룹화 (ab)*는 "", "ab", "abab", "ababab"...
  • .+: 문자를 1회 이상 반복
  • ^[1-9][0-9]*$: 처음 숫자는 0이 아닌 숫자이고 전체가 숫자
  • ^\d {6}-\d {7}$: 숫자를 각각 -를 중심으로 6번, 7번 반복
  • (seojun )? Bye: "bye" 또는 "seojun Bye" 
  • 예시
import re
s=r"^[\w]+@[\w]+\.[A-Za-z]{2,4}$"

email="abcde@gmail.com"
if(re.search(s,email)):
      print("True")
else: 
      print("False")
True

'python study > 프로그래밍1' 카테고리의 다른 글

인공지능 수업(2일차)  (0) 2024.07.16
인공지능 수업(1일차)  (0) 2024.07.15
파이썬 기초(7)  (0) 2024.05.19
파이썬 기초(6)  (1) 2024.05.19
파이썬 기초(5)  (0) 2024.05.19