for, while에 대해서 공부하였다.
필수적으로 알아야 하는 내용은 enumerate()를 이용한 리스트의 for문 출력, 리스트 내포 for문의 형식이다.
# enumerate 내장함수의 리스트 적용
a = ['개', '고양이', '새']
for i, animal in enumerate(a):
print(i, animal)
'''
'결과'
0 개
1 고양이
2 새
'해석'
enumerate() 내장함수를 이용해서 리스트의 인덱스 뿐만 아니라 값도 출력했다.
'''
'''
리스트 내포 for 문의 형식
[표현식 for 항목 in 컨테이너 객체[개장함수] if 조건]
'''
이 두 가지 이다.
============================ Python ============================
##### for
### for의 기본
# else는 for가 정상적으로 수행되고나면 실행되는 부분이다.
for i in [3,2,1]:
print(i, end=' ')
else:
print('안녕')
# 저장된 컨테이너 객체 호출
a = ['cat', '고양이']
for i in a:
print(i)
else:
print()
# 세트 객체 호출
a = set([1,2,3,4,5,6,7,8,9])
for i in a:
print(i, end=' ')
else:
print()
# 리스트 객체 호출
a=[('one', 1),('two', 2), ('three', 3)]
for i in a:
print('영문은 ', i[0], '이고 정수는 ', i[1], '이다.')
else:
print()
'''
'결과'
영문은 one 이고 정수는 1 이다.
영문은 two 이고 정수는 2 이다.
영문은 three 이고 정수는 3 이다.
'해석'
i에 a[0,1,2]가 들어간다. 즉, a[0][0], a[1][0], a[2][0]와 a[0][1], a[1][1], a[2][1]가 들어가는 것.
'''
# 포맷팅 문자로 리스트 안의 튜플 추출
a = [('one', 1), ('two', 2), ('three', 3)]
for i in a:
print('영문은 %s이고 정수는 %s이다.' %i)
else:
print()
'''
'결과'
영문은 one이고 정수는 1이다.
영문은 two이고 정수는 2이다.
영문은 three이고 정수는 3이다.
'''
# for 문의 헤더에서 각 튜플의 값 추출
a = [('one', 1), ('two', 2), ('three', 3)]
for en, num in a:
print(en, num)
for en in a:
print(en)
'''
'결과'
one 1
two 2
three 3
('one', 1)
('two', 2)
('three', 3)
'해석'
en 하나만 있는 경우 a[0,1,2]가 출력되었다.
en, num 두 개가 있는 경우 튜플 안의 원소들이 각각 할당받아서 출력되었다.
즉, en은 a[0][0], a[1][0], a[2][0], num은 a[0][1], a[1][1], a[2][1]로 출력된 것이다.
'''
# 딕셔너리 객체 호출
a = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
for key in a:
print(key, a)
'''
'결과'
four {'four': 4, 'two': 2, 'one': 1, 'three': 3}
two {'four': 4, 'two': 2, 'one': 1, 'three': 3}
one {'four': 4, 'two': 2, 'one': 1, 'three': 3}
three {'four': 4, 'two': 2, 'one': 1, 'three': 3}
'해석'
결과값이 순서대로가 아닌 랜덤하게 나온 것을 볼 수 있다.
딕셔너리는 시퀀스 자료형이 아니기 때문에 이런 결과가 나온 것이다.
'''
# 딕셔너리의 키에 대한 반복 추출
a = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
for key in a:
print(key, a[key])
'''
'결과'
three 3
two 2
one 1
four 4
'해석'
딕셔너리는 시퀀스 자료형이 아니기 때문에 무작위로 추출되어 나왔다.
'''
# 딕셔너리의 모든 키값의 순차적 추출
from collections import OrderedDict
a = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
ordered_a = OrderedDict(sorted(a.items()))
for key in ordered_a.items():
print(key)
'''
'결과'
('four', 4)
('one', 1)
('three', 3)
('two', 2)
'해석'
collections의 OrderedDict을 이용해서 키 순서대로 정렬하였다. 여기서 키의 크기순으로 정렬되는 것이다.
String에서 f -> o -> th -> tw 순서대로 적용되었다.
'''
# 딕셔너리의 키와 값을 동시에 참조하여 추출
a = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
for key in a.items():
print(key, a)
'''
'결과'
('four', 4) {'four': 4, 'two': 2, 'three': 3, 'one': 1}
('two', 2) {'four': 4, 'two': 2, 'three': 3, 'one': 1}
('three', 3) {'four': 4, 'two': 2, 'three': 3, 'one': 1}
('one', 1) {'four': 4, 'two': 2, 'three': 3, 'one': 1}
'해석'
for 의 반복 요소를 a.items()로 설정하여 (키,값)으로 묶어준 뒤 출력한다.
'''
### 반복문 for의 활용
# len 내장함수 활용
a = ['cat', '고양이', '호놀룰루']
for i in a:
print(len(i), i)
'''
'결과'
3 cat
3 고양이
4 호놀룰루
'해석'
String의 길이와 String이 출력되었다. 즉, print(len(a[0],i))로 출력되었다는 뜻.
'''
# range 내장함수
for i in range(10):
print(i, end=' ')
else:
print()
'''
'결과'
0 1 2 3 4 5 6 7 8 9
'해석'
range(10) = [0,1,2,3,4,5,6,7,8,9]이므로 10개 출력
'''
# range 내장함수의 인수 두 개 적용
for i in range(5,10):
print(i, end=' ')
else:
print()
'''
'결과'
5 6 7 8 9
'''
# range 내장함수의 인수 세 개 적용
for i in range(1, 10, 2):
print(i, end=' ')
else:
print()
'''
'결과'
1 3 5 7 9
'''
# 총합
total = 0
for i in range(1,11):
print(i, end=' ')
total += i
else:
print()
print(total)
'''
'결과'
1 2 3 4 5 6 7 8 9 10
55
'''
### enumerate 내장함수를 이용한 반복문 for의 활용. 자료형 데이터의 인덱스와 값을 동시에 출력할 때 사용한다.
# enumerate 내장함수의 리스트 적용
a = ['개', '고양이', '새']
for i, animal in enumerate(a):
print(i, animal)
'''
'결과'
0 개
1 고양이
2 새
'해석'
enumerate() 내장함수를 이용해서 리스트의 인덱스 뿐만 아니라 값도 출력했다.
'''
for i in enumerate(a):
print(i)
'''
'결과'
(0, '개')
(1, '고양이')
(2, '새')
'해석'
기본적으로 (인덱스, 원소) 형태로 출력된다는 것을 알 수 있다.
'''
for i in a:
print(i, a[i]) # enumerate() 내장 함수를 안 써서 생기는 오류. for in 을 이용해서 리스트의 내부 값을 추출하지 못한다.
# TypeError: list indices must be integers or slices, not str
for i in a:
print(a[i]) # 동일한 에러 출력. TypeError: list indices must be integers or slices, not str
# enumerate 내장함수의 튜플 적용
a = ('개', '고양이', '새')
for i, animal in enumerate(a):
print(i, animal)
'''
'결과'
0 개
1 고양이
2 새
'''
for i in enumerate(a):
print(i)
'''
'결과'
(0, '개')
(1, '고양이')
(2, '새')
'해석'
위의 리스트 형태와 동일하다. (인덱스, 원소) 형태로 출력되는 것을 알 수 있다.
'''
# enumerate 내장함수의 딕셔너리 적용
a = {'1': '개', '2': '고양이', '3': '새'}
for i, number in enumerate(a):
print(i, number, a[number])
'''
'결과'
0 2 고양이
1 1 개
2 3 새
'해석'
순서에 상관없이 출력되었다.
'''
### 리스트 내포 for 문
'''
리스트 내포 for 문의 형식
[표현식 for 항목 in 컨테이너 객체[개장함수] if 조건]
'''
# 리스트 내포 for문의 기초
s =[]
for k in range(10):
s.append(k*k)
print(s)
'''
'결과'
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
'해석'
s라는 비어있는 리스트에 0~9까지 제곱한 값을 하나씩 넣는다.
'''
s = [k*k for k in range(10)]
print(s)
'''
'결과'
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
'해석'
s =[]
for k in range(10):
s.append(k*k)
print(s)
이것과 동일한 결과지만 코드 길이가 절반으로 줄었다.
'''
# 리스트 내포 for 문의 활용
s = [(i, j, i*j) for i in range(2, 20, 2) for j in range(3, 20, 3) if (i + j)%7 == 0]
print(s)
'''
'결과'
[(2, 12, 24), (4, 3, 12), (6, 15, 90), (8, 6, 48),
(10, 18, 180), (12, 9, 108), (16, 12, 192), (18, 3, 54)]
'해석'
s = []
for i in range(2, 20, 2):
for j in range(3, 20, 3):
if (i + j)%7 == 0:
s.append((i, j, i * j))
print(s)
20보다 작은 2의 배수와 3의 배수 중, 각각을 더해 7의 배수가 되는 조합을 찾고 그것의 곱을 출력하는 프로그램.
'''
# 튜플 형태로 리스트에 저장
a = 'abc'
b = (1, 2, 3)
c = []
[c.append((x, y)) for x in a for y in b]
print(c)
'''
'결과'
[('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1), ('c', 2), ('c', 3)]
'해석'
a = 'abc'
b = (1, 2, 3)
c = []
for x in a:
for y in b:
c.append((x,y))
print(c)
중첩 for 문이다. 특별한 것은 없다.
'''
# 리스트 형태로 리스트에 저장
words = 'The quick brown fox jumps over the lazy dog'.split()
s = [[w.upper(), w.lower(), len(w)] for w in words]
print(s)
'''
'결과'
[['THE', 'the', 3], ['QUICK', 'quick', 5], ['BROWN', 'brown', 5],
['FOX', 'fox', 3], ['JUMPS', 'jumps', 5], ['OVER', 'over', 4], ['THE', 'the', 3],
['LAZY', 'lazy', 4], ['DOG', 'dog', 3]]
'해석'
words = 'The quick brown fox jumps over the lazy dog'.split()
s = []
for w in words:
s.append([w.upper(), w.lower(), len(w)])
print(s)
'''
============================ Python ============================
'프로그래밍 > Python, R 프로그래밍' 카테고리의 다른 글
[Python] Python 10일차 (0) | 2018.05.28 |
---|---|
[R] 10일차 (0) | 2018.05.28 |
[R] R 9일차 (0) | 2018.05.23 |
[Python] Python 8일차 (0) | 2018.05.21 |
[R] R 8일차 (0) | 2018.05.21 |