TIL/Python

[Python] split() 와 strip()

아람2 2024. 12. 3. 13:08
반응형

split()

입력 문자열을 공백 (스페이스, 탭, 개행 등) 기준으로 리스트 형태로 반환 

사용 예시 

word = input().split()

# 입력
hello world
# 결과
word = ['hello', 'world'] # 리스트로 저장

strip() 

입력 문자열의 양쪽 끝에 있는 공백 (스페이스, 탭, 개행 등) 을 제거하고, 문자열로 반환

사용 예시 

word = input().strip()

# 입력
hello
# 결과
word = 'hello' # 문자열로 저장

 

백준 1181 단어 정렬을 다시 풀어보면서, 나도 모르게 split() 을 썼는데 

중복 제거를 하려고 썼던 data_list = list(set(data_list)) 에서 아래와 같은 에러가 나왔다 

Traceback (most recent call last):
  File "/Users/-/07_정렬/09_1181_단어정렬.py", line 19, in <module>
    word_list = list(set(word_list))
                     ^^^^^^^^^^^^^^
TypeError: unhashable type: 'list'

 

hashable 

Hash 는 특정 데이터를 고정된 크기의 고유 값 (해시 값) 으로 매핑하는 알고리즘이다 

Hashable 객체란, 고유한 해시 값을 가지며 동일한 값에 대해 항상 같은 해시 값을 반환하는 객체를 의미한다 

객체의 내용이 변경되면 해시 값이 달라질 수 있으므로, hashable 하려면 객체는 변하지 않아야 한다 

Immutable 자료형은 그 내용이 변하지 않으므로 항상 같은 해시 값을 가진다, 따라서 Hashable 하다 

반대로, Mutable 자료형은 내용이 변할 수 있으므로 (고유한 해시 값을 보장할 수 없어) Unhashable 하다 

 

문자열 str 은 항상 같은 해시 값을 반환하여 Hashable 하지만 

리스트 List 는 Mutable (변경 가능)하기 때문에 고유한 해시 값을 보장할 수 없다 

튜플 Tuple 도 불변이므로 Hashable 하다 

 

따라서 set 을 사용하기 위해서는 List 가 아닌 str or Tuple 을 사용해야 하고,

1181 단어 정렬은 아래 코드처럼 정리할 수 있다 

백준 1181 단어 정렬 

# https://www.acmicpc.net/problem/1181

# 알파벳 소문자로 이루어진 N개의 단어를 아래 조건에 따라 정렬하는 문제 
# 1. 길이가 짧은 것부터
# 2. 길이가 같으면 사전 순으로 
# 중복된 단어는 하나만 남기고 제거 

# 중복 단어는 set 으로 없애고
# 사전 순 정렬 -> 길이 순 정렬하면 되겠다 

n = int(input().strip()) # 입력 받을 단어의 개수 
word_list = [] # 입력 받은 단어를 저장할 리스트 

# 입력 받기 
for _ in range(n):
    word_list.append(input().strip())

# 중복 단어 없애기 
word_list = list(set(word_list))

# 사전 순 정렬 
word_list.sort() 
# 길이 순 정렬 
word_list.sort(key=lambda data: len(data)) 

# 단어 하나씩 출력하기 
for word in word_list:
    print(word)

 

반응형

'TIL > Python' 카테고리의 다른 글

Insert Dummy Data into MySQL w/ Python  (0) 2025.02.11
[TIL] B-Tree, B-트리  (1) 2024.10.04
[TIL] 배낭 문제 Knapsack Problem  (0) 2024.10.01
[TIL] LCS 알고리즘  (1) 2024.09.30
[TIL] 그리디 알고리즘 Greedy Algorithm  (0) 2024.09.29