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)

'''



##### while
### while의 기본
# 조건이 항상 참, 무한루프
a = 1
while a < 11:
    print(a)
'''
항상 a < 11 이기 때문에 무한루프가 발생한다. 
'''

# 조건식이 거짓일 경우
a = 1
while a > 11:
    print(a)
else:
    print('조건식이 거짓이므로 실행한다.')
'''
'결과'
조건식이 거짓이므로 실행한다.
'''

# 숫자 세기
count = 1
while count < 11:
    print(count, end=' ')
    count += 1
else:
    print('끝')
'''
'결과'
1 2 3 4 5 6 7 8 9 10 끝

'해석'
count는 1부터 반복이 1회 끝나면 1씩 더해진다. else:는 while 구문이 끝나면 실행된다.
'''

# 총합
total = 0
a = 0
while a<10:
    a += 1
    total += a
    print(total, end=' ')
'''
'결과'
1 3 6 10 15 21 28 36 45 55 

'해석'
a는 1씩 더해지고 total 또한 a를 더하기 때문에 1씩 더해진다. 최종적으로 0+1+2+3+4+5+6+7+8+9+10 = 55
여기서 끝에 10이 나오는 이유는 a = 9이면 a += 1  ->  total += a 가 진행되기 때문이다.
만약 +10을 빼고 싶으면 a += 1을 반복문 맨 뒤에 위치시키면 된다.
'''
total = 0
a = 0
while a<10:
    total += a
    print(total, end=' ')
    a += 1
'''
'결과'
0 1 3 6 10 15 21 28 36 45 
'''

============================ 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

+ Recent posts