파이썬에서 문자열(string)은 인덱싱은 가능하나, 리스트와는 다르게 인덱스를 이용한 값 변경은 불가능하다.

따라서 지정된 함수를 이용해서 문자열을 변경해야 한다.

 

 문자열 변경 - replace('old','new')


a = 'I love Java'
a=a.replace('Java','Python')
print(a)

>>I love Python

 

 

문자열 내 문자 변경 - str.maketrans('old','new'), translate(table)


문자 변경은 문자열 변경과 다르게 두 가지 과정이 필요하다.

먼저 str.maketrans()를 이용하여 바꿀 문자와 새로운 문자 간의 변환 테이블을 만들어야 한다.(1대 1 대응)

그 후 문자를 변경하고 싶은 문자열을 대상으로 translate 함수를 사용하면 된다.

말이 어려운데 예시를 보자.

a = 'my name is duck'
table = str.maketrans('abcdefghi','123456789') #1대1대응
a = a.translate(table)
print(a)

>>my n1m5 9s 4u3k

위의 예시의 table을 출력해보면

table = str.maketrans('abcdefghi','123456789')
print(table)

>>{97: 49, 98: 50, 99: 51, 100: 52, 101: 53, 102: 54, 103: 55, 104: 56, 105: 57}

위와 같이 a:1, b:2, c:3 ... 가 아스키코드로 변환되어 딕셔너리 형태로 저장되어 있는 것을 볼 수 있다.

이 테이블을 이용하여 translate함수를 사용하면 

'my name is duck'이 'my n1m5 9s 4u3k'으로 변환되는 것을 볼 수 있다.

 

 

※str.maketrans()함수를 사용할 때는 꼭 두 인자의 길이가 같아야 한다!!!(위에서 말한 1대 1 대응)

문자열 포매팅이란 문자열 안에 어떤 값을 삽입하는 방법이다. (c언어를 해보았다면 printf를 떠올리면 좋을 듯.)

포매팅의 방법에는 %d,%s와 같은 포맷 코드를 사용하는 방법과 format 함수를 사용하는 방법 등이 있다.

age = 24

print("I am %d years old" %age)	#포맷 코드 사용(코드 종류는 아래에서 설명)
print("I am {0} years old".format(age))	#format 함수 사용
print("I am {0} {1} old".format(age,'years'))	# ,로 구분하여 여러개도 입력 가능
print("I am {a} years old".format(a=24))	#이름을 정해서 넣을 수도 있다.

>>I am 24 years old
>>I am 24 years old
>>I am 24 years old
>>I am 24 years old

※포맷 코드

코드 설명
%s 문자열(string)
%c 문자 1개(character)
%d 정수(integer)
%f 부동소수(float)
%o 8진수
%x 16진수
%% 문자 %

 

 

리스트를 이용한 포매팅도 가능하다.

x=[1,2,3]
print("{p[0]} and {p[1]} and {p[2]}".format(p=x))

>>1 and 2 and 3

 

 


f 문자열 포매팅


파이썬 3.6 버전부터는 f 문자열 포매팅이란 걸 사용할 수 있다.

 

아래와 같이 먼저 문자열 변수를 선언하고 출력 또는 복사할 문자열 앞에 f를 붙이면 사용이 가능하다.

name = 'duck'
age = 24
print(f"My name is {name}.")
print(f"I am {age} years old.")

>>My name is duck.
>>I am 24 years old.

 

 

문자열(string)을 리스트(list)로


입력된 문자열 "I love python"을 단어 단위로 list로 변환하려면

a= "I love python"
print(a.split()) #공백을 기준으로 나눈다.

>>['I','love','python']

split()의 인자로 값을 주면 그 값을 기준으로 나눈다.

a='I/love/python'
print(a.split('/'))

>>['I', 'love', 'python']

단어 단위가 아닌 알파벳 하나씩 나누고싶다면,

a="I love python"
print(list(a))

>>['I', ' ', 'l', 'o', 'v', 'e', ' ', 'p', 'y', 't', 'h', 'o', 'n']

 

리스트(list)를 문자열(string)로


위와 반대로 리스트를 문자열로 바꿀수도 있다.

a=['I','love','python']
print("".join(a)) # 각 요소를 공백없이 붙인다.
print(" ".join(a)) # 요소사이에 공백을 추가.
print("\n".join(a)) # 한줄에 하나씩.

>>Ilovepython
>>I love python
>>I
>>love
>>python

※리스트의 구성요소가 모두 문자열이어야 가능!

+ Recent posts