1. 리스트는 무엇이고 왜 필요한가
리스트와 딕셔너리를 이용하여 여러 개의 데이터를 한꺼번에 저장하고 처리 가능
리스트 안에 저장된 각각의 데이터를 항목(item) 또는 요소(element) 라고 함
2. 여러 개의 항목이 들어가는 리스트를 만들자
bts = []
3. 리스트 연산을 해보자
대응되는 원소끼리 더할거면 넘파이를 이용해야 함
리스트에 어떤 값이 포함되는 지 알려면 in 연산자를 사용해야 함
black_pink = ["jisoo", "rose", "lisa", "jennie"]
inp = "jennie" in black_pink
print(inp)
inp2 = "psy" in black_pink
print(inp2)
fruits = []
for i in range(3):
user = input("좋아하는 과일 이름을 입력하시오: ")
fruits.append(user)
user = input("과일의 이름을 입력하세요: ")
if user in fruits:
print("이 과일은 당신이 좋아하는 과일입니다.")
else:
print("이 과일은 당신이 좋아하는 과일이 아닙니다.")
4. 리스트에 사용 가능한 함수를 알아보자
하나의 리스트 안에 여러 가지 타입의 데이터를 섞어서 저장가능함
그러나 이는 권장되지 않는 방법으로 차라리 리스트로 묶어서 넣는게 나음
type()으로 자료형을 알아볼 수 있음
max() 리스트 항목 중 최댓값 반환
min() 리스트 항목 중 최솟값 반환
sum() 리스트 항목의 합을 반환
any() 0이 아닌 원소가 하나라도 있는가
Seoul = 9756
Busan = 3441
Incheon = 2954
city_pop = [Seoul, Busan, Incheon]
Daejeon = 1531
city_pop.append(Daejeon)
print("최대 인구: ", max(city_pop))
print("최소 인구: ", min(city_pop))
print("평균 인구: ", sum(city_pop))
5.
Seoul = 9756
Busan = 3441
Incheon = 2954
city_pop = [Seoul, Busan, Incheon]
Daejeon = 1531
city_pop.append(Daejeon)
def sum(list):
sum = 0
for i in range(len(list)):
sum += list[i]
return (sum / len(list))
def max(list):
itr = list[0]
for i in range(1, len(list)):
if itr > list[i]:
continue
else:
itr = list[i]
return itr
def min(list):
itr = list[0]
for i in range(1, len(list)):
if itr < list[i]:
continue
else:
itr = list[i]
return itr
print("최대 인구: ", max(city_pop))
print("최소 인구: ", min(city_pop))
print("평균 인구: ", sum(city_pop))
a in list를 통해서 나처럼 함수를 2개로 나누지 않고도 가능함
5. 인덱스를 사용하여 리스트의 항목에 접근하자
인덱스: 항목의 번호
음수는 리스트의 마지막 부터 시작
min, max는 문자열은 사전식 순서로 찾는다
6. 리스트를 원하는 모양으로 자르는 슬라이싱
letters[2:5] 2부터 시작해서 4까지(range랑 같은듯)
슬라이싱 되면 복사본 리스트가 생기는 것임
range처럼 슬라이싱도 처음 끝 스텝을 정할 수 있음
스텝값을 -1로 주면 뒤에서 부터 앞으로 읽어옴
numbers = [4, 5, 6, 7, 8, 9]
print("6 추출: ", numbers[2:3])
print("5, 6 추출: ", numbers[1:3])
print("시작인덱스 생략 4, 5, 6 추출: ", numbers[:3])
print("시작인덱스 1, 스텝값 2: ", numbers[1::2])
population = ["Seoul", 9765, "Busan", 3441, "Incheon", 2954]
print(population[1:2])
print(population[-1])
print(population[::2])
print(sum(population[1::2]))
음수 슬라이싱은 뒤에서 -1을 적으면 인천빼고 나온다 왜지? 추론상 처음에 있는게 -7로 치고 -1인 마지막 앞에서 끊는 느낌
s = "Python is strong"
print(s[:1])
print(s[10:16])
print(s[:6])
print(s[7:9])
7. 리스트의 원소 값을 자유롭게 조작해 보자
슬라이싱을 이용하여 여러 원소의 값을 변경할 수 있음
slist[2:4] = ['Paik', 180.0]
append()는 리스트의 뒤쪽에만 추가할 수 있고 insert(index, item)를 사용하여 지정된 index 위치에 항목을 추가할 수 있음
8. 항목을 삭제하는 방법은 여러가지가 있다
remove() 메소드는 리스트에서 지정된 항목을 삭제함
pop() 리스트의 마지막 항목을 삭제하여 그 항목값을 반환함
del 파이썬의 키워드로 해당 항목을 메모리에서 삭제하는 기능
9. 리스트의 객체의 생성과 참조라는 깊이있는 개념
리스트는 저장 위치만을 가지고 있음 즉 주소를 참조하는 것
등호를 사용하여 리스트를 복사하면 리스트 값 자체를 복사하여 새로운 메모리, 주소에 저장하는 것이 아니라 주소만 복사하기 때문에 이렇게 복사한 리스트의 값을 바꾸면 원래 리스트의 값도 바뀌게 된다
참조: 변수의 이름이 실제 존재하는 메모리 상의 객체를 가리키는 것
파이썬에서 변수의 이름은 모두 객체에 대한 참조로 이루어져 있음
id()를 통해서 메모리에 올라온 객체의 고유한 식별번호를 알아낼 수 있음
10. 리스트를 복제한 새로운 리스트 만들기
새로운 리스트를 만들려면 list()함수를 사용해야 함
슬라이싱 역시 새로운 리스트를 만드는 것
11. 리스트를 탐색해보자
특정 항목이 리스트의 어던 인덱스에 있는지 알려면 index()를 사용하면 됨
탐색하고자 하는 항목이 리스트에 없다면 오류가 발생하기 때문에 in을 사용하여 리스트 안에 항목이 있는지부터 확인해야 함
12. 리스트를 크기에 따라 정렬해보자
정렬: 리스트 안의 항목들을 크기 순으로 나열하는 것
sort()메소드로 가능
기본정렬 방식은 오름차순이고 reverse로 내림차순으로 정렬할 수 있음
sorted()로 새롭게 정렬된 배열을 만들 수도 있음
print(sorted("FADEAWAY"))
import random
quotes = []
quotes.append("꿈을 지녀라. 그러면 어려운 현실을 이길 수 있다.")
quotes.append("분노는 바보들의 가슴 속에서만 살아간다")
quotes.append("고생 없이 얻을 수 있는 진실로 귀중한 것은 하나도 없다")
quotes.append("사람은 사랑할 때 누구나 시인이 된다")
quotes.append("시작이 반이다")
print("####################")
print("# 오늘의 명언 #")
print("####################")
print("")
print(random.choice(quotes))
import random
expression = []
expression.append("100 + 200")
expression.append("100 + 300")
expression.append("100 + 400")
expression.append("100 + 500")
expression.append("100 + 600")
expression.append("100 + 700")
expression.append("100 + 800")
expression.append("100 + 900")
expression.append("100 + 1000")
expression.append("100 + 1200")
print(eval(random.choice(expression)))
13. 리스트 함축은 코드를 짧고 간결하게 만드는데 사용된다
리스트 함축(list comprehension):
[x**2 for x in [1, 2, 3, 4, 5]]
>> [1, 2, 3, 4, 5] 리스트 안의 각 원소들을 x**2한 값으로 바꾼 배열을 만들어라
14. 조건이 붙는 리스트 함축 표현도 가능하다
if를 넣어서 조건식을 추가할 수도 있음
[x for x in range(10) if x % 2 == 0]
리스트의 항목을 가져와서 튜플로 새로운 리스트를 만들 수도 있음
15. 한번 생성하면 그 값을 고칠 수 없는 자료형: 튜플
불변속성(immutable): 말그대로 불변
가변속성(imutable): 가변
튜플은 리스트와 아주 유사하지만 한번 지정되면 변경될 수 없는 대표적인 불변속성 자료형
구조가 단순하고 리스트에 비해서 접근 속도가 빠름 하드웨어적으로 좋다는 의미? 내부 코드가 간결하다?
colors = (" ", " ", " ")
튜플은 시퀀스의 일종이기에 인덱싱과 슬라이싱은 리스트와 동일하게 작동하며 +와 *도 사용가능함
* 시퀀스: 원소의 순서가 있는 데이터 구조
튜플은 괄호가 필수조건이 아님 (13) >> int / p = 1, 2, 3, 4 >> 튜플
import math
def calCircle(r):
area = math.pi * r * r
circum = 2 * math.pi * r
return area, circum
radius = float(input("원의 반지름을 입력하시오: "))
(a, c) = calCircle(radius)
print("원의 넓이는 " + str(a) + "이고 둘레는" + str(c) + "이다.")
파이썬은 언패킹이 가능함 즉 (a, c) = calCircle(radius) 여기서 a, c에 왜 괄호를 쳤는지는 모르겠으나 (튜플 아님)
a, c에 튜플 값들 언패킹하여 넣음
언패킹(unpacking): 파이썬에서 하나의 변수에 저장된 여러 값을 각각의 변수로 분리하여 할당하는 기능
city_info = [('서울', 9765), ('부산', 3441), ('인천', 2954), ('광주', 1501), ('대전', 1531)]
def min_max_avg(list):
min_pop = 9999999999
max_pop = -min_pop
max_count = 0
min_count = 0
sum = 0
for i in range(len(list)):
if list[i][1] > max_pop:
max_pop = list[i][1]
max_count = i
if list[i][1] < min_pop:
min_pop = list[i][1]
min_count = i
sum += list[i][1]
return max_count, min_count, sum/len(list)
max_count, min_count, avg = min_max_avg(city_info)
print("최대인구: ", city_info[max_count][0], ", 인구: ", city_info[max_count][1],"천명")
print("최소인구: ", city_info[min_count][0], ", 인구: ", city_info[min_count][1],"천명")
print("리스트 도시 평균 인구: ", avg,"천명")
max()함수는 숫자, 문자열 등 같은 자료형끼리 비교가 가능하다 다른 자료형이 원소에 있다면 오류가 난다
16. 클래스와 객체가 무엇인가
객체지향 프로그래밍 방식: 다양한 객체를 클래스로 미리 정의해두고 이 객체들이 프로그램 상에서 상호작용하면서 원하는 작업을 수행하는 문제해결 방식
>> 프로그램 코드가 복잡해져서 관리가 어려워지지 않게 하기 위한 방법
리스트도 일종의 클래스임
각 객체들은 클래스의 틀을 지키면서 각자 다른 실제 값을 담고 있음 이런 객체를 인스턴스(instance) 객체라고 한다
메소드(method): 특정한 클래스에 속한 객체들이 사용할 수 있는 함수들
요약
1. 리스트와 딕셔너리를 이용하여 여러 개의 데이터를 한꺼번에 저장하고 처리 가능
2. 슬라이싱, 음수는 역순으로 자름 참고로 슬라이싱은 새로운 리스트를 만듦
3. del은 해당 항목의 메모리 자체를 삭제함
4. 리스트는 주소를 참조함 새로운 리스트를 만들어야 값을 베껴 옴 (sorted는 새로운 리스트, sort는 그냥 정렬만)
5. 리스트 함축 x**2 for x in list[] if xxxxx 이렇게 조건을 줄 수 있음
6. 시퀀스 원소의 순서가 있는 데이터 구조
7. 객체지향 프로그래밍: 다양한 객체를 미리 정의해두고 이 객체들이 프로그램 상에서 상호작용하면서 원하는 작업을 수행하는 문제 해결 방식 즉 관리를 쉽게 하기 위한 방법
객체들이 실제 값을 담았을때 인스턴스라고 함 즉 객체는 뭔가 개념적인 부분이고 인스턴스는 실체가 있는 객체를 의미하는 듯
'코딩의 기록' 카테고리의 다른 글
유클리드 호제법 (+ 유클리드의 소수의 무한성 증명) (1) | 2025.01.30 |
---|---|
따라하며 배우는 파이썬과 데이터과학 7장 심화문제 (0) | 2025.01.20 |
따라하며 배우는 파이썬과 데이터 과학 6장 심화문제 (0) | 2025.01.16 |
따라하며 배우는 파이썬과 데이터과학 -6. 함수로 일처리를 짜임새있게 하자 (0) | 2025.01.13 |
따라하며 배우는 파이썬과 데이터과학 5장 심화문제 (0) | 2025.01.09 |