문자열과 리스트를 좀 더 자세히 알아봅시다.
문자열
문자열에서는 요런 식으로 한 글자마다 번호를 매긴답니다. 문자열을 만들어서 이것저것 시켜보세요.
>>> x = 'banana' >>> x[0] 'b' >>> x[2:4] 'na' >>> x[:3] 'ban' >>> x[3:] 'ana'
이렇게 문자열의 각 글자 위치(인덱스)를 이용해서 문자열을 써는 방법을 슬라이싱(slicing)이라고 합니다. 이에 관해서는 '슬라이싱’에서 좀 더 알아볼게요.
그런데 banana
를 nanana
로 바꿀 수는 있을까요?
>>> x[0] = 'n'
위와 같이 하면… 될까요? 안 됩니다. 아래처럼 TypeError라는 오류가 나죠.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
이렇듯, 문자열에 들어있는 글자는 바꿀 수가 없답니다.
아래처럼 할 수는 있지만,
>>> x = 'n' + x[1:] >>> x 'nanana'
이건 문자열 x
의 'b'
를 'n'
으로 바꾼 것이 아니라, 'n'
과 'anana'
를 합친 새로운 문자열 'nanana'
에 x
라는 이름을 붙인 것입니다.
문자열에 어떤 글자가 몇 번째 자리에 있는지 알고 싶을 때는 find()
를 사용하면 됩니다.
>>> s = "hello Python!" >>> s.find('P') 6
'P'가 6번 인덱스에 있다는 것을 알았으니, 다음과 같이 슬라이싱해서 다른 변수로 저장할 수도 있겠죠?
>>> s[0:6] 'hello ' >>> h = s[0:6] >>> h 'hello '
위의 h
변수의 끝에는 공백이 포함되었는데, 다음과 같이 슬라이싱을 하거나 rstrip()
으로 제거할 수 있습니다.
>>> h[0:5] 'hello' >>> h.rstrip() 'hello'
또는 다음과 같이 주어진 문자열을 분할한 리스트를 생성하는 split()
을 이용해 첫 번째 단어를 알아내는 방법도 있습니다.
>>> s.split() ['hello', 'Python!'] >>> s.split()[0] 'hello'
리스트
이번엔 리스트를 살펴보도록 하겠습니다. 원소를 추가하는 것부터 해볼까요?
>>> prime = [3, 7, 11] >>> prime.append(5) >>> prime [3, 7, 11, 5]
sort
함수를 사용하면 정렬을 간단하게 할 수 있구요.
>>> prime.sort() >>> prime [3, 5, 7, 11]
아차, 2
를 빠뜨렸네요. 맨 앞(0
번)에 2
를 삽입(insert
)하겠습니다.
>>> prime.insert(0, 2) >>> prime [2, 3, 5, 7, 11]
원소를 삭제하는 것도 되지요. 4
번 원소를 삭제해 보겠습니다.
>>> del prime[4] # delete 4th element in prime >>> prime [2, 3, 5, 7]
원소를 삭제할 때 pop()
을 사용할 수도 있습니다. pop()
은 리스트에서 삭제한 원소를 반환(return)하므로 변수로 받아서 나중에 사용할 수도 있죠.
>>> a = prime.pop() # 삭제한 원소를 a 변수로 받음 >>> prime [2, 3, 5] >>> a 7
다음과 같이 리스트의 원소에 새로운 값을 지정할 수도 있습니다.
>>> prime[0] = 1 >>> prime [1, 3, 5]
리스트에 리스트를 집어넣을 수도 있지요. 피자가게에서 주문할 음식 리스트를 볼까요?
>>> orders = ['potato', ['pizza', 'Coke', 'salad'], 'hamburger'] >>> orders[1] ['pizza', 'Coke', 'salad'] >>> orders[1][2] 'salad'
마찬가지로 리스트를 사용해서 간단히 행렬을 표현할 수도 있습니다. 행렬은 아마 고등학교 때 배우죠?
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
문자열을 리스트로 바꾸기
지금까지 문자열과 리스트를 따로따로 알아봤는데요, 이번엔 둘 다 갖고 놀아봅시다. 문자열을 리스트로 바꿔보도록 하죠.
>>> characters = [] >>> sentence = 'Be happy!' >>> for char in sentence: ... characters.append(char) ... >>> print(characters) ['B', 'e', ' ', 'h', 'a', 'p', 'p', 'y', '!']
처음에 characters
라는, 비어있는 리스트를 만들었습니다. 그리고, sentence
라는 변수를 만들어서 Be happy!
라는 문자열을 가리키도록 했지요. 전에 for 문을 배울 때에는 리스트를 이용해서 이터레이션을 수행하였는데, 이번에는 문자열을 이용해 보았습니다. 여기선 sentence
가 가리키는 Be happy!
의 글자 하나하나에 대해서 어떤 일을 수행하게 되죠. 첫번째 글자인 B
를 characters
라는 리스트의 첫번째 원소로 넣고, 두번째 글자인 e
를 characters
의 두번째 원소로 넣는 식입니다.
사실은 아래처럼 문자열을 바로 리스트로 변환해도 같은 결과를 얻을 수 있답니다.
>>> list('Be happy!') ['B', 'e', ' ', 'h', 'a', 'p', 'p', 'y', '!']
숫자를 문자열로 바꾸기
정수(int) 123
을 가리키는 my_int
변수가 있다고 합시다.
>>> my_int = 123 >>> type(my_int) <class 'int'>
문자열 '123'
을 얻고 싶다면 다음과 같이 할 수 있습니다.
>>> str(my_int) '123
위 출력 결과를 보시면 작은따옴표가 붙어 있습니다. 타입을 확인해 보면 더 정확히 알 수 있죠.
>>> type(str(my_int)) <class 'str'>
이렇게 얻은 문자열을 다음과 같이 변수에 할당하는 것도 가능합니다.
>>> my_str = str(my_int)
엄밀히 말하자면 '숫자를 문자열로 바꾼' 것이라기보다는, '숫자값을 가지고 새로운 문자열을 얻었다'고 표현하는 것이 맞겠죠.
문자열을 숫자로 바꾸기
역으로, 숫자를 나타낸 문자열에서 숫자를 얻어낼 수도 있습니다.
>>> int('123') 123 >>> float('123') 123.0
리스트 원소들의 합 구하기
1부터 10까지의 정수를 원소로 갖는 리스트 one_to_ten
이 있습니다.
>>> one_to_ten = list(range(1, 11)) >>> one_to_ten [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1부터 10까지를 더한 값은 얼마일까요?
for 문을 사용해서 계산할 수도 있겠지만, sum()
을 이용하면 손쉽게 구할 수 있답니다.
>>> sum(one_to_ten) 55