#1. for, in - 문장의 단어를 하나씩 가져오기
1
2
3 |
fruits = ["apple" , "orange", "pear"]
for fruit in fruits:
print(fruit + "는 맛있어") |
cs |
*CODE DESCRIPTION:
line 1.리스트를 만들 때는 위에서 보는 것과 같이 대괄호([ ])로 감싸 주고 각 요소값들은 쉼표(,)로 구분해 준다.
(리스트명 = [요소1, 요소2, 요소3, ...]) 위는 문자열 리스트이다.
line2.
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
...
fruits의 첫 번째 원소인 apple이 fruit에 대입되고 print(fruit + "는 맛있어") 문장을 수행한다. 첫 번째 원소에 대한 함수가 끝났으므로 차례대로 두 번째 원소, 세번째 원소를 각각 fruit에 대입하고 함수 안의 문장을 수행하게 된다.
두 번째로는 range()라는 함수를 이용한 숫자 list라고 생각하면 쉽다. argument로 숫자가 들어가면 그 수보다 하나 작은 값까지 범위를 갖게된다. 코드로 살펴보자.
1
2 |
for i in range(10):
print(i) |
cs |
range(10)은 [0,1,2,...,9] 의 숫자 리스트를 의미하며 위의 for, in의 흐름과 똑같이 각 수가 i에 대입되어 함수의 문장을 수행하게 된다.
그렇다면 이번엔 위의 두 개념을 모두 이용하여 문자열 리스트와 수를 매칭하여 출력해보자.
1
2
3 |
fruits = ["apple", "orange", "pear"]
for i in range(len(fruits)):
print("과일" + str(i+1) + ": " + fruits[i]) |
cs |
*CODE DESCRIPTION:
line2. range의 parameter type과 의미에 맞는 len()함수 사용. len() - 리스트의 개수 반환
line3. str로 <int to string> Type conversion, []를 이용한 list indexing. C++의 array indexing과 같음
Exercise
1
2
3
4
5
6
7
8
9
10
11 |
# 트럼프 대통령의 1월 1~3일 트윗을 각각 리스트의 원소로 저장합니다.
trump_tweets = [
'Will be leaving Florida for Washington (D.C.) today at 4:00 P.M. Much work to be done, but it will be a great New Year!',
'Companies are giving big bonuses to their workers because of the Tax Cut Bill. Really great!',
'MAKE AMERICA GREAT AGAIN!'
]
# index에 0~2을 차례대로 저장하여 반복문을 실행합니다.
for index in range(len(trump_tweets)):
print('2018년 1월 ' + str(index+1) + '일: ' + trump_tweets[index]) |
cs |
#2. indexing - 단어의 일부분 가져오기(slicing)
먼저 리스트 인덱싱에 대해 살펴보자.
1
2
3
4
5 |
fruits = ["apple", "banana", "kiwi", "pear"]
last_fruit = fruits[-1]
tropical_fruit = fruits[1:3]
no_apple = fruits[1:]
no_pear = fruits[:3] |
cs |
*CODE DESCRIPTION:
line2: C++과 다르게 인덱싱은 range(len(list))에서 -N ~ (N-1) 까지 가능하다. 만약 [-5]나 [4] 등을 인덱싱하면 list index out of range 에러를 내뱉는다.
lin3~5: 리스트 슬라이싱이 가능하다. [1:3] 은 1번째 원소부터 2번째 원소까지 리스트를 의미하며, [1:]은 첫 번째부터 마지막 원소, [:3]은 첫 번째 원소부터 2번째 원소까지 포함하는 리스트를 의미한다.
다음은 문자열 인덱싱을 살펴보자.
1
2
3
4
5 |
word = "superman"
print(word[3]) # 'e'
print(word[-1]) # 'n'
print(word[5:]) # "man"
print(word[:5]) # "super" |
cs |
Exercise
1
2
3
4
5
6
7
8
9
10
11
12
13 |
def print_korea(text):
'''
문자열로 구성된 리스트에서 k로 시작하는 문자열을 출력합니다.
'''
# 아래 print_korea() 함수를 완성하세요.
for word in text:
if(word[0] == 'k'):
print(word)
# 함수를 완성한 후 아래 코드의 주석을 해제하고 결과를 확인해보세요.
print_korea(trump_tweets) |
cs |
*CODE DESCRIPTION:
line1. argument로 문자열 리스트를 받는 함수를 정의한다.
line7. 각 원소를 word에 대입시켜 안의 문장을 수행하게 된다. 위에서 문자열 인덱싱에서도 살펴 보았듯이 각 word의 첫번째 문자를 참조하는 방법은 word[0] 이고 문자'k'와 논리 연산(==)을 수행하여 true이면 안의 if 문 안의 문장을 수행하게 된다.
line13. 정의한 함수를 실행한다.
위의 line7~9를 다음과 같이 바꿀 수도 있다.
1
2
3 |
for i in range(len(text)):
if(text[i][0] == 'k'):
print(text[i]) |
cs |
line2 에서 C++의 array of array(multidimentional array) 개념으로 생각하면 이해하기 쉽다.