2. 파이썬 프로그래밍과 데이터

YoonA Kim·2022년 11월 27일

파이썬

목록 보기
2/6

1. 리스트

1.1 리스트

변수에 여러 값 저장하기
대괄호 사용

numbers = [2, 4, 6, 8, 10]
names = ["윤아", "수영", "서현"]

리스트에서 개별 값을 인덱스
개별 값을 불러오는 것을 인덱싱 indexing
리스트변수의 대괄호에 숫자 입력
첫 인덱스는 0부터 시작
인덱스의 갯수를 넘어선 값을 넣으면 에러남
마이너스 인덱스가 있음, -1은 제일 뒤에서 첫번째 부터

print(names[1]) ---- 수영
print(names[-1]) ---- 서현
print(names[-3]) ----윤아

리스트 슬라이싱 list slicing
리스트 중에서 일부의 리스트만 사용하는 것
대괄호 안에 [시작하는 인덱스 : 끝나는 인덱스+1]을 입력한다.
시작인덱스, 끝나는 인덱스 둘 중 하나만 넣을 수도 있다.

print(numbers[0:3]) ---- [2, 4, 6]
print(numbers[3:]) ----[8, 10]

리스트 슬라이싱으로 새로운 변수를 정의했다면,
그 속에서 또 리스트 슬라이싱을 할 수있다.

new_list = numbers[:3] ---- [2, 4, 6]
print(new_list[2]) ----[6]

^^주의^^
number[:3]은 리스트로 나오지만
number(3)은 정수/소수/문자열 등으로 나온다
그리고 number[3]도 number(3)과 같은 값이 나온다.
즉, 리스트로 뽑고 싶으면 []에 두개 이상의 파라미터 또는 :를 꼭 넣어야한다

리스트를 정의하고나서, 그 중의 인덱스를 바꿀 수 있다.

numbers = [2, 4, 6, 8, 10]
numbers[0] = 7
print(numbers) ---- [7, 4, 6, 8, 10]

빈 리스트도 생성 가능
numbers = []

리스트 안의 리스트도 가능하다 = nested lit
예 = 세명의 학생이 세번의 시험을 보았다.
grades = [[60, 90, 30], [30, 50, 70], [70, 80, 90]]

print(grades[0]) ----[60, 90, 30]
print(grades[0][1]) ---- 90
print(grades[0][0] + grades[1][0] + grades[2][0] /3) ---- 첫번째 시험의 평균

1.2 리스트 함수

numbers = [2, 4, 6, 8, 10, 12]

리스트의 길이 측정 len()
print(len(numbers)) ---- 6

리스트의 값 추가 .append(추가하고 싶은 내용)
반드시 맨 오른쪽, 맨 마지막 순서로 추가됨
numbers.append(14)
print(numbers) ---- [2, 4, 6, 8, 10, 12, 14]

리스트 값 삭제 del 리스트이름[삭제하고 싶은 인덱스]
del numbers[3]
print(numbers) ---- [2, 4, 6, 10, 12]

리스트 값 삽입 .insert(삽입위치인덱스, 삽입값)
numbers.insert(4, 100)
print(numbers) ---- [2, 4, 6, 8, 100, 10, 12]

리스트 값 삭제 리스트이름.remove(삭제하고싶은값)
단, 이 경우 첫번째로 그 값을 가진 원소만 삭제해줍니다.
같은 값이 2개 이상 있을 경우에는 두번째 값은 삭제가 되지 않아요.
fruits = ["딸기", "당근", "파인애플", "수박", "참외", "파인에플", "메론"]
fruits.remove("파인애플")
print(fruits) ----

동일한 리스트 값의 개수 세기 .count(세고 싶은 값)
print(fruits.count("파인애플")) ---- 2

1.3 인덱스 정렬

numbers = [4, 8, 2, 6, 10]

정렬방법 (1) sorted : 기존의 리스트 정의를 변경하지 않고 return할 뿐이다!!
작은 숫자부터 큰 숫자로 정렬하기 sorted(리스트이름)
new_list = sorted(numbers)
print(new_list) ---- [2, 4, 6, 8, 10]

큰 숫자부터 작은 숫자로 정렬하기 sorted(리스트이름, reverse=True)
new_list = sorted(numbers, reverse=True)
print(new_list) ---- [10, 8, 6, 4, 2]

정렬방법 (2) sort : 기존의 리스트 정의를 변경해버린다. return값은 없다.
작은 숫자부터 큰 숫자로 정렬하기 리스트이름.sort()
numbers.sort()
print(numbers) ---- [2, 4, 6, 8, 10]

큰 숫자부터 작은 숫자로 정렬하기 리스트이름.sort(reverse=True)
numbers.sort(reverse=True)
print(numbers) ---- [10, 8, 6, 4, 2]

정렬방법 (3) reverse : 기존의 리스트 정의를 변경해버린다, sort의 반대로. return값은 없다.
numbers.reverse()
print(numbers) ---- [10, 8, 6, 4, 2]

1.4 리스트 확인

리스트에 이 값이 있는지 확인하기 = in
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
print(7 in primes) ---- True
print(12 in primes) ---- False

리스트에 이 값이 없는지 확인하기 = not in
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
print(7 not in primes) ---- False
print(12 not in primes) ---- True

리스트에서 이 값에 해당하는 인덱스 리턴해주기 = index
members = ["영훈", "윤수", "태호", "혜린"]
print(members.index("윤수")) ---- 1
print(members.index("태호")) ---- 2

2. for 반복문

2.1 for 반복문 정의

while보다 용이하게 반복문 설정!

my_list = [2,3,4,5]
for number in my_list :
print(number)

결과값 : 2 3 4 5

여기서 number는 인덱스가 아니라 값 그자체 이다!!!!!!!!!!!!

^^바보같은 실수^^
while처럼 for을 쓰는 경우

for i in range(0:len(numbers) :
	numbers[i] = 블라블라

이걸 고치면

for n in numbers :
	n = 블라블라... 

2.2 range 함수

간편하고 깔끔하게 리스트 설정
메모리의 효율성!

range(파라미터 2개) = 시작숫자, 끝나는 숫자 +1
range(2, 5) ---- [2,3,4]

range(파라미터 1개) = 끝나는 숫자 +1
range(5) ---- [0,1,2,3,4]

range(파라미터 3개) = 시작숫자, 끝나는 숫자+1, 간격
range(2, 10, 2) ---- [2,4,6,8]

3. 사전 dictionary

3.1 사전 정의

값과 인덱스까 쌍을 이루는 리스트
값/밸류와 키가 쌍을 이루는 사전

키: 밸류

my_dictionary = {
5: 25,
2: 4,
3: 9
}
print(my_dictionary[3]) ---- 9

새로운 쌍 추가
my_dictionar[9] = 81
print(my_dictionary) ---- {5: 25, 2: 4, 3: 9, 9: 81}

리스트와의 차이점

  • 사전은 순서라는 개념이 없다
  • 사전의 키는 정수가 아니어도 된다. 스트링도 가능!
my_mate = {
	'반잔' : '김지영'
    '부반장' : '김지호'
    '짝궁' : '이지윤'
}

3.2 사전 활용

사전 속 밸류 찾기
my_mate.values()

for value in my_mate.valuse() :
print(value) ---- 김지영 김지호 이지윤

사전 속 키 찾기
my_mate.keys()

for key in my_mate.keys() :
print(key) ---- 반장 부반장 짝궁

사전 속 키와 밸류 동시에 찾기
my_mate.items()

for key, value in my_mate.items() :
print(key, value) ---- 반장 김지영 부반장 김지호 짝궁 이지윤

사전 속 들어있는지 확인하기
print('김지영' in my_mate.values()) --- TRUE/FLASE

사전 속 들어있는지 조건문으로 쓰기
if '김지영' in my_mate :

~~~~

if '김지영' not in my_mate :

~~~

4. 파이썬 데이터의 비밀?

4.1 aliasing

aliasing 만들기
x = [1,2,3,4,5]
y = x ---- y가 x의 가명 즉 alias가 됨, 둘은 '같은' 리스트를 지칭하는 다른 이름이 되는 것
y[2] = 4 ---- y와 x의 리스트가 똑같이 바뀜
print(x) ----[1,2,3,4,4]
print(y) ----[1,2,3,4,4]

aliasing 피하기
x = [1,2,3,4,5]
y = list(x) ---- y가 x와 똑같은 값의 다른 리스트를 지칭하게 됨
y[2] = 4 ---- y의 리스트만 바뀜
print(x) ----[1,2,3,4,5]
print(y) ----[1,2,3,4,4]

4.2 리스트와 문자열

리스트와 문자열은 비슷한 점도 다른 점도 있다.

인덱싱을 문자열에서도 똑같이 할 수 있다.
string = "abcdefg"
print(string[0]) ---- a
print(string[3]) ---- d
print(string[-1]) ---- g

인덱스 슬라이싱을 문자열에서도 똑같이 할 수 있다.
string = "abcdefg"
print(string[0:3]) ---- abc
print(string[4:]) ---- efg

문자열을 연결하듯, 리스트도 +로 연결할 수 있다.
str_1 = 'hello'
str_2 = 'world'
str_3 = str1 + str2
print(str_3) ---- helloworld

list_1 = [1,2,3]
list_2 = [4,5,6]
list_3 = list_1 + list_2
print(list_3) ---- [1,2,3,4,5,6]

len을 문자열에도 쓸 수 있다.
list_1 = [1,2,3,4]
print(len(list_1)) ---- 4

string_1 = 'hello'
print(len(string_1)) ---- 5

이렇게 비슷한 것이 많으니,
문자열로 for 반복문을 사용할 수도 있다.
title = 'coffee'
for alphabet in title:
print(alphabet) ---- c o f f e e

단, 문자열은 리스트와 달리 일부분 값을 수정할 수 없다.

title = 'coffee'
title[3] = a

만약 수정하려는 코드를 넣으면 다음과 같이 오류가 뜬다
TypeError: 'str' object does not support item assignment

문자열 거꾸로 만들기

reverse 함수가 들지 않는 문자열
아래처럼 하면 문자열을 뒤집을 수 있다!

str_word = str(word)
reversed_str = str_word[::-1]

profile
코딩 배우는 중

0개의 댓글