본문 바로가기
혼공단

[혼공학습단 6기] 혼공파 3주차

by Mopa 2021. 7. 26.

04-1 리스트와 반복문

 

 리스트는 파이썬에서 처음 보는 형식인데, '자료를 저장할 수 있는 자료'가 개념이라고 한다.

 

1. 선언 형식

리스트 선언, 출력

 여기서, [ ] 안의 각 원소들을 요소, 그 위치들을 인덱스라고 한다.

 

 리스트 안의 형식들은 어떻게 적용될까 궁금했는데, 파이썬에서의 반복문을 아직 배우지 않아 살짝 뒷부분을 예습하고 눈대중으로 실험해보았다.

자료형 출력 코드
결과값

 리스트 안에서의 자료형은 선언할 때 그대로 유지되는 것을 알 수 있다. 

 자료형 선언에서의 True의 T를 소문자로 선언하였을 때는 true가 선언된 자료형의 이름이 아니라서 오류가 발생하지만, 대문자로 선언하면 불 형식의 요소가 되는 것을 확인하였다.

 

2. 특징

 

 전체적으로 이전 단원에서 배웠던 문자열과 비슷하다고 느꼈다. 그러나 조금 더 '집합'이라는 표현과 가깝지 않나 싶다. C언어와 비교해봤을 때 이런 형식이 있었나 싶을 정도로 자료형에 구애받지 않아서 너무 편했다. 저번에도 말했던 것 같지만 파이썬과 C언어를 비교하면 자료형 표현과 이용에서 파이썬이 훨씬 코딩하기 좋다는 것을 다시 깨닫게 되었다.

 

3. 잡기술

 

 리스트에는 편리한 기능들이 많은데, 적절한 표현들이 떠오르지 않아 '잡기술'로 명명하였다. 이 책에서 처음으로 나오는 잡기술은 인덱스를 편하게 이용하는 것인데, 문자열에도 사용하였던 음수 인덱스도 있지만 '이중 인덱스'도 있다.

 

 이중 인덱스란 리스트 안의 요소로 리스트를 지정하거나, 문자열을 지정하면 그 문자열와 리스트에서도 인덱스를 사용할 수 있는 것이다. 

 

문자열 선언
이중 인덱스 코드
결과

리스트 내포라는 것도 있는데, 리스트와 반복문을 이용한 구문을 만들 때 여러 줄의 코드를 한번에 작성할 수 있게 하는 것이다.

 

리스트명 = [표현식 for 반복자 in 반복할 수 있는 것]

또는

리스트명 = [표현식 for 반복자 in 반복할 수 있는 것 if 조건문]

 

 

4. 유용한 함수들

 

 문자열에도 적용되는 + 연결, * 반복, len()으로 길이 구하기 등이 있지만 문자열에도 적용되는 것이므로 가볍게 이해하고 넘어갔다.

 

  리스트에만 적용되는 것들은 요소 추가, 제거, 전체 제거 등이 있는데

 

 4-1 요소 추가

 

 리스트명.append(요소) / 리스트명.insert(위치, 요소) / 리스트명.extend([요소1, 요소2, 요소3]) 가 있다.

 

 앞의 함수 둘의 차이는 요소 추가 위치를 지정하냐 안하냐인데, append 함수는 맨 뒤에, insert 함수는 지정한 위치에 삽입한다.

 

 extend 함수는 셋 중 유일하게 여러 개의 요소를 삽입하는데, 삽입하는 요소의 형식이 리스트라 리스트 연결 연산자(+)와 차이가 무엇인가 했는데, 비파괴적 함수와 파괴적 함수의 차이라고 한다. 비파괴적 함수는 +, 파괴적 함수는 extend인데, 아마 함수를 선언하고 원래 리스트를 변형시키지 않으면서 함수의 결과값을 합친 리스트로 내고 싶다면 +를 쓰는 것이 아닐까 싶다.

 

 4-2 요소 제거

 

  del 리스트명[인덱스] / 리스트명.pop(인덱스) / 리스트명.remove() / 리스트명.clear() 가 있다.

 

 앞의 둘의 차이는 pop 함수는 인덱스를 입력하지 않으면 마지막 요소를 제거한다는 것이다. 리스트의 길이를 알 수 없고, 마지막 요소를 제거해야만 하는 상황에서 편리할 것 같다. 

 

 del 함수만의 장점도 있다. 범위를 지정해서 제거하는 것인데, 범위를 지정하는 방법은 항상 그랬듯이 [x:y] 형식이다.

 

 remove 함수는 인덱스가 아닌 값을 제거하는 방식이다. 주의할 점은 같은 요소가 여러 개 있으면, 가장 앞의 요소만 제거한다. 

 

 clear 함수는 모든 요소를 제거하는데, 함수 뒤에 있는 ()는 왜 붙었는지 잘 모르겠다. 함수 형식을 띄기 때문에 붙어야 하는 것일까?

 

제거하는 방식에서 이중 인덱스를 사용할 수 있나 실행해봤는데, 

 

del 함수를 사용하면 

TypeError: 'str' object doesn't support item deletion이 뜨면서 실패하고

 

pop 함수를 사용하면 

TypeError: 'str' object is not callable이 뜨면서 실패한다.

 

 4-3 값이 리스트 안에 있는지 확인하기

 

 요소 in 리스트명 

 

 정말 직관적인 함수이다. 요소가 리스트 안에 있으면 True, 없다면 False를 출력한다.

 

 정확히 반대로 작동하는 함수인 

 

 요소 not in 리스트명 도 존재한다.

 

5. for 반복문

 

 for 반복문은 C언어에도 존재하지만, 여기서의 for 반복문은 아예 다른 형태이다.

 

 for 반복자 in 반복할 수 있는 것:

      코드

 

 반복자는 반복될 자료의 이름 선언, 반복할 수 있는 것은 반복할 자료을 지정해주는 것인 것 같다.

 

04-2 딕셔너리와 반복문

딕셔너리는 '키를 기반으로 값을 저장하는 것' 이라고 한다.

 

1. 선언 형식

딕셔너리 선언 및 출력 코드
딕셔너리 출력 결과

 리스트, 불 문자, 등등 지금까지 배웠던 모든 자료형이 적용되고, 이중 인덱스도 적용이 된다. 

 왜 이름이 딕셔너리인 지 알 것 같다. 뭔가 사전에서 단어 찾을 때 단어와 뜻이 나열되어 있는 모습과 흡사한 느낌이다.

 

2. 특징

 

 C언어에서의 유사한 것을 찾자면 포인터..?라고 할 수도 있을 것 같지만 다른 점이 너무 많아서 둘을 같다고 치부할 수는 없을 것 같다. 앞의 리스트가 집합인 느낌이라면 이건..뭔가 대응?의 개념에 가까운 것 같다. 

 

3. 유용한 함수들

 

3-1 값 추가

 

 딕셔너리[새로운 키] = 새로운 값

 

 유의할 점은 값은 제일 마지막에 추가되고, 새로운 키가 아니라 기존에 있는 키를 넣으면 기존 값이 대체된다는 것 정도이다. 

 

3-2 값 제거

 

 del 딕셔너리[""]

 

 정말 리스트의 del과 똑같이 작동한다. 지정하는 것도 인덱스와 키로 비슷하다.

 

3-3 딕셔너리 안에 키가 있는지 확인 

 

 키 in 딕셔너리 / not in 딕셔너리 / 자료 = 딕셔너리.get("")

 

 책에는 나와 있지 않지만 당연히 not in 함수도 된다.

 get 함수는 키가 존재하지 않으면 자료가 None가 된다.

 

04-3 반복문과 while 반복문

 파이썬에는 range 자료형이 있는데, 간단하게 세 가지 방식으로 선언할 수 있다.

 

range(A) : 0부터 A-1까지의 정수 범위

range(A, B) : A부터 B-1까지의 정수 범위

range(A, B, C: A부터 B-1까지의 정수 범위인데, 각각의 숫자 만큼의 차이가 C (ex, range(0,10,3) == [0, 3, 6, 9])

 C 자리에 음수를 넣어서 범위를 뒤에서부터 앞으로 범위를 만들 수도 있다. 

 다만, 당연히 범위가 이상하면 아무것도 나오지 않는다.

이상한 범위 코드

1. while 반복문

 

1-1 형식

 

while 불 표현식:

    문장

 

 C언어와 완전히 비슷한 형식이라 따로 이해가 필요한 부분은 없었다. 불 표현식이 참인 동안 문장을 계속 반복한다.

 

1-2 응용

 

 시간을 변수로 넣을 수 있는데, 유닉스 타임이라는 것을 이용하면 시간을 끌어올 수 있다. 

 

유닉스 타임 사용법

 

1. 시간 기능 가져오기 : import time

C언어의 include를 여기선 import로 쓰는 것 같다.

 

2. 유닉스 타임 구하기 : time.time()

()가 들어간 것을 보아하니 이것도 함수인 것 같다.

 

 예시

유닉스 타임 코드

 결과값은 1970년 1월 1일 정각을 기준으로 몇 초가 지났는지를 정수로 나타낸 결과가 나온다.

 

1-3 유용한 키워드들

 

break / continue

 

 반복문을 벗어나는 break, 반복문을 생략하는 continue가 있는데, C언어와 같아서 추가로 이해가 필요하진 않았다.

 

04-4 문자열, 리스트 , 딕셔너리와 관련된 기본 함수

1. 리스트에 적용하는 함수 - max, min, sum

 

 max(리스트명) / min(리스트명) / sum(리스트명

 

 리스트 내에서 최댓값을 반환하고 / 리스트 내에서 최솟값을 반환하고 / 리스트 내의 모든 값을 더한 값을 반환한다.

 sum 함수는 이상한 형식을 넣으면 오류 메세지 TypeError: unsupported operand type(s) for +: 'int' and 'str' 가 출력된다.

 

2. 리스트 뒤집기 - reversed()

 

 reversed(리스트명)

 

 리스트의 요소의 순서를 뒤집어 준다. 

 

 다만 여기서 reversed()함수는 제너레이터 라는 것인데, 일단은 for 구분 안에 reversed 함수를 넣어서 사용한다고만 알고 있으라고 한다. 

 

3. 현재 인덱스 순서 확인하기 - enumerate()

 

 enumerated(리스트명)

 

4. 딕셔너리로 쉬벡 반복문 작성하기 - items()

 

리스트명.items()

 

딕셔너리 안의 키와 값을 한번에 설정한다.