그 외

[python] 파이썬 기초(문자열 vs 리스트 비교 변환)

자몽몽 2022. 7. 13. 08:38

알고리즘을 풀면서 리스트형을 자주 사용하다 보니 문자열로 풀기 좋은 문제를 리스트로 접근하려고 하여 한번 정리해봅니다.

 

문자열과 리스트는 둘 다 숫자/문자를 저장할 수 있는 자료형입니다. 하지만 서로 다른 자료형이죠.

 

입력하고 싶은 값이 Apple이라고 하면 다음과 같이 입력됩니다.

 

문자열: 

str = 'Apple'

print (str)
>> Apple

print(str[0])
>> A

 

리스트: 

list1 = ['Apple']

print(list1)
>> ["Apple"]

print(list1[0])
>> Apple

 

즉 문자열은 문자 자체를 저장하는 자료형이고 리스트는 문자열을 저장하는 자료형입니다.

 

문자열의 경우 숫자도 넣을 수 있지만 숫자를 문자열로 저장하는 방식이고

 

리스트는 문자열 외에 숫자형, 리스트, 딕셔너리 등 여러 자료형을 본래 형태를 유지하며 저장할 수 있습니다.

 

예시) 리스트에 여러 자료형 넣기

 

    list1.append('Apple') # 문자열 넣기
    list1.append(1) # 숫자 넣기
    list1.append(['1','2']) # 리스트 넣기
    list1.append({"a" : 1, "b":2}) # 딕셔너리 넣기

    print(list1)
    >> ['Apple', 1, ['1', '2'], {'a': 1, 'b': 2}]

 

특성이 이러하다 보니 문자를 다룰 때는 리스트형을 보통 사용하는 거 같습니다. 

 

하지만 숫자형을 다룰 때에는 문자열을 사용할지 리스트를 사용할지 고민이 필요합니다. 

 

먼저 문자열을 사용하면 쉽게 긴 숫자를 자르고 붙일 수 있습니다. 탐색도 쉽게 할 수 있죠. 

심지어 다시 숫자형으로 변환하기도 쉽습니다. 

 

예를들어 입력값이 12, 23, 34, 45로 주어졌을 때 순서대로 더해서 1223445로 만들어보라는 문제가 주어진다면

가장 먼저 떠오르는 방법은 수학적으로 접근하여 숫자형으로 푸는 방법일 것입니다.

 

\(12*10^6 +23*10^4..\) 입력 방식에 따라 for문을 돌려야할 수도 있음

 

하지만 문자열을 이용하면 간단하게 해결할 수 있죠.

 

str = '12'+'23'+'34'+'45'
print(int(str))
>>12233445

 

리스트의 경우 원하는 숫자를 골라 제거, 원하는 위치에 추가, 순서를 뒤집기, 정렬 등에서 장점을 가집니다.

일반 숫자형으로 선언한 경우 for문을 돌려야 구할 수 있는 값들이 리스트형을 사용하면 간단하게 구현할 수 있는 경우가 많습니다.

또한 보통 여러 값이 입력되는 경우 리스트형으로 입력되는 경우가 많아 사용법을 익혀놓는 게 좋습니다.

 

                                                              파이썬 자료형 및 사용법 정리 예정

 

마무리로 문자열 ↔ 리스트 변환하는 법 정리해보겠습니다.

 

문자열 → 리스트

str ='happy'
list1 =[] 

# 1.원본 그대로 저장
list1.append(str)
print(list1)
>> ['happy']

# 2. 한 문자씩 저장 (1)
for i in str:
	list1.append(i)
print(list1)
>> ['h','a','p','p','y']

# 3. 한 문자씩 저장 (2)
list1 = list(str)
print(list1)
>> ['h','a','p','p','y']

 

리스트 → 문자열

list1 = ['2','.','p','e','o','p','l','e']

#1. join 이용 
str1 = ' '.join(str(s) for s in list1)
print(str1)

#2. map 이용
str1 = ' '.join(map(str, list1))
print(str1)

리스트를 변환할때는 map을 이용하면 편리합니다. 다음번엔 map 사용법도 정리해보도록 하겠습니다.