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()
딕셔너리 안의 키와 값을 한번에 설정한다.
'혼공단' 카테고리의 다른 글
[혼공학습단 6기] 혼공파 6주차 (0) | 2021.08.17 |
---|---|
[혼공학습단 6기] 혼공파 5주차 (0) | 2021.08.11 |
[혼공학습단 6기] 혼공파 4주차 (0) | 2021.08.02 |
[혼공학습단 6기] 혼공파 2주차 (0) | 2021.07.18 |
[혼공학습단 6기] 혼공파 1주차 (0) | 2021.07.07 |