일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- join
- 정처기
- 인프런
- SQL
- 프로그래머스
- Til
- doitandroid
- groupby
- 오블완
- 스터디
- 카카오코테
- Android
- select
- 코테
- 혼공챌린지
- Kotlin
- java
- 정보처리기사
- 혼공단
- 티스토리챌린지
- 알고리즘
- CS
- 혼공파
- MySQL
- 자료구조
- 안드로이드스튜디오
- 안드로이드
- 코틀린
- 자바
- 기술면접
- Today
- Total
Welcome! Everything is fine.
[1주차] Python 100 문제풀이 Part.2 - 배열 본문
📌 여름방학 스터디 시작
목표
1) 인프런 <예제로 공부하는 Python 100 문제풀이> 강의 완강하기
2) Python과 관련된 개념을 블로그에 정리하고 공유하기
3) 문제풀이를 통해 코딩테스트 대비하기
계획
날짜 | 공부 범위 |
21.07.01 ~ 21. 07.08 | Python 100 문제풀이 Part.2 - 배열 |
21.07.08 ~ 21.07.15 | Python 100 문제풀이 Part.2 - 함수 |
21.07.015 ~ 21. 07.22 | Python 100 문제풀이 Part.3 - OOP |
21.07.22 ~ 21.07.29 | Python 100 문제풀이 Part.3 - 모듈 |
21.07.29 ~ 21.08.05 | Python 100 문제풀이 Part.3 - 알고리즘/문자열 |
💡 컬렉션 자료형 4가지
1) 리스트(list) : 순서가 있고 요소를 추가하거나 삭제하는 등 수정이 가능하다. 대괄호[ ]로 표현한다.
2) 튜플(tuple) : 순서가 있지만 한번 작성하면 수정할 수 없다. 소괄호( )로 표현한다.
3) 집합(set) : 순서가 없고 중복을 허용하지 않는다. 중복 된 값을 자동으로 걸러내기 때문에 어떤 리스트에서 중복된 값을 제거하는 역할로 사용할 수도 있다. 중괄호{ }로 표현하는 것은 딕셔너리와 같지만 key값이 없다.
4) 딕셔너리(dict) : 순서는 없지만 수정할 수 있다. 중괄호{ }안에 key 값과 value 값을 넣어 표현한다.
💡 리스트(list)
리스트란?
다양한 데이터 값(정수, 실수, 문자열, 튜플...등)을 담는 바구니다.
리스트의 특징
- 순서가 있으며, 수정이 가능하다.
- 리스트 안에 또 다른 리스트를 요소로써 가질 수 있다.
- 중복된 값을 가질 수 있다.
- 파이썬 내부에서 하나의 타입이므로, type()함수로 리스트 타입을 출력하면 list라고 나온다.
- 리스트의 각 요소에는 인덱스 번호가 0부터 붙여지므로 그 인덱스 번호를 사용해서 접근하고 출력시에도 사용한다.
❔ 문제 : 정수형, 실수형, 문자형 리스트를 생성하는 예제를 만들어보시오.
a = [1, 2, 3, 4, 5]
b = [1.0, 2.0, 3.0, 4.0, 5.0] # 0쓰지않고 .만 써도 실수로 출력됨
c = ['a', 'b', 'c', 'd', 'e']
❔ 문제 : 파이썬 리스트 생성시 서로 다른 데이터 자료형 값을 사용하여 만들어보시오.
a = [1, 2, 3, 4, 5, ['a', 'b', 'c']]
b = [100, 3.14, 'korea', [1, 2, 3]]
c = [1, 2, 3, [1, 2, 3], (1, 2, 3)]
d = [100, 3.14, 'korea', [1, 2, 3, 3], (1, 2, 3, 3), {1, 2, 3}, {'a': 100, 'b': 200, 'c': 300}]
빈 리스트를 생성하는 법
a = []
b = list()
❔ 문제 : 인덱스를 이용하여 리스트 요소에 접근하고 해당 요소 값을 출력해보시오.
a = [100, 200, 300, 400, 500]
print(a[0],a[1],a[2],a[3],a[4])
❔ 문제 : 아래의 리스트에서 korea, 365, 400 이라는 값이 출력되도록 작성하시오.
a = [100, 3.14, 'korea', [1, 2, 3, 365], (100, 200, 300, 400, 500)]
print(a[2])
print(a[3][3])
print(a[4][3])
❔ 문제 : 역인덱스를 사용하여 리스트 요소의 마지막 부터 거꾸로 출력되도록 구현하시오.
a = [100, 200, 300, 400, 500]
print(a[-1],a[-2],a[-3],a[-4],a[-5]) # 맨 끝부터 -1
❔ 문제 : 인덱스와 반복문을 사용하여 리스트 요소의 값들을 모두 출력하시오.
a = [100, 200, 300, 400, 500, [1, 2, 3], (4, 5, 6)]
for i in range(len(a)): # 배열의 길이 구할땐 len()함수 사용
print(i, '=', a[i])
리스트 정렬하기
- sort( ), sorted( ) 함수를 사용하여 정렬한다.
- sort( ) : 원본 리스트를 바로 변경한다.
- sorted( ) : 사본을 변경한다.
- 정렬 디폴트는 오름차순이다. 내림차순으로 출력하려면 reverse옵션을 True로 바꿔야한다.
lst = [20, 40, 10, 60, 30]
lst.sort() # 오름차순 정렬
lst.sort(reverse=True) # 내림차순 정렬
❔ 문제 : 학생들의 영어 점수를 오름차순으로 출력하는 코드를 구현하시오.
eng_scores = [100, 40, 70, 90, 60]
eng_scores.sort()
print(eng_scores)
❔ 문제 : 역인덱스를 사용하여 영어 점수를 오름차순과 내림차순으로 출력시키시오.
eng_scores = [ 100, 40, 70, 90, 60 ]
eng_scores.sort()
for i in range(-len(eng_scores), 0):
print(eng_scores[i],'(',i,')',end='\t')
리스트에 요소 추가, 수정, 삭제하기
1) 추가 : append( ) 함수를 사용한다. ex) score.append(33)
2) 수정 : index에 새로운 값을 대입한다. ex) score[-1] = 33
3) 삭제 : del과 index를 사용한다. ex) del score[-1]
❔ 문제 : 학생들의 영어 점수 리스트에 새 전학생의 영어 점수를 추가하고 수정, 삭제해보시오.
eng_scores = [90, 60, 75, 100, 88]
# 추가
eng_scores.append(99)
print(eng_scores)
# 수정
eng_scores[-1] = 37
print(eng_scores)
# 삭제
del eng_scores[-1]
print(eng_scores)
리스트 병합하기
- 더하기 연산자(+)를 사용하여 병합한다.
- 리스트 사이에서 곱하기 연산자(*)는 사용할 수 없지만, 리스트 * 숫자는 가능하다.
* 튜플도 더하기 연산자를 사용하여 병합할 수 있다.
* 집합은 더하기 연산자를 사용할 수 없으며, 중복이 안되기 때문에 곱하기 연산자 역시 사용할 수없다.
❔ 문제 : 2개의 리스트를 하나의 리스트로 묶는 병합 처리에 대한 코드를 구현하시오.
a = [0, 1, 2, 3, 4]
b = [5, 6, 7, 8, 9]
print(a+b)
리스트 안에 있는 요소의 인덱스 번호 출력하기
- index( )를 사용하여 접근한다. ex) animal.index['lion']
❔ 문제 : 동물원에서 원하는 동물의 케이지(cage)를 찾아서 출력하는 코드를 구현하시오. 이때, 동물 이름은 사용자 입력으로 처리한다.
# <예상출력결과>
# 케이지를 알고 싶은 동물의 이름을 입력하세요 = hippo
# hippo 동물의 케이지는 1번 위치에 있습니다. 1번 케이지 약도를 출력하시겠습니까?
animals = ['elephant', 'hippo', 'lion', 'tiger', 'alligator']
animal = input('케이지를 알고싶은 동물의 이름을 입력하세요 : ')
cage = animals.index(animal)
print(animal + ' 동물의 케이지는 ' + str(cage) + '번 위치에 있습니다. ' + str(cage) + '번 케이지 약도를 출력 하시겠습니까?')
print( f'{animal} 동물의 케이지는 {cage}번 위치에 있습니다. {cage}번 케이지 약도를 출력하시겠습니까?') # 더 편하게 출력하기
리스트에 중복된 값을 제거하는 방법
- 중복 된 값을 허용하지 않는 것은? 바로 집합(set)!
- 리스트를 집합으로 바꿔 중복된 값을 제거 한 뒤, 다시 리스트로 바꾼다.
- set(중복된 리스트) # 기존의 리스트를 집합으로 바꿔서 중복 제거(이때의 집합 타입은 요소가 순서없이 뒤죽박죽 정렬이 됨)
- list ( set(중복된 리스트) ) # 중복을 제거한 후 다시 리스트로 바꾸기
❔ 문제 : 리스트에 들어있는 동물중 중복된 동물을 제거하여 출력하시오.
lst = ['dog', 'hippo', 'elephant', 'lion', 'tiger', 'alligator', 'hippo', 'lion']
list(set(lst))
❔ 문제 : 아래의 자료구조에 접근시 에러가 나는 것은 무엇이고 그 이유를 설명해보시오.
# [1] : 리스트
a = [ 'dog', 'hippo', 'elephant', 'lion', 'tiger', 'alligator', 'hippo', 'lion' ]
print( '[1] lion 출력하기 : ', a[3] )
# [2] : 집합
b = set( a )
print( '[2] lion 출력하기 : ', b[3] )
✔ [2]번이 에러가 난다. 집합(set)타입은 순서가 없기 때문에 인덱스로 접근할 수 없다.
리스트 컴프리헨션(list comprehension) : 리스트를 간단하게 만들 수 있도록 제공하는 방법
- 리스트 컴프리헨션을 사용하면 리스트를 더욱 간단하게 만들 수 있어 유용하다.
수동으로 리스트를 생성한다면
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
이렇게 원소를 일일히 적어주어야한다.
혹은 for 반복문을 이용하여 빈 리스트에 append하는 방식으로로 가능하다.
a =[]
for i in range(1,11):
a.append(i)
if i == 10:
print(a)
위의 코드를 한줄로 간단하게 작성할 수 있는데, 그것이 리스트 컴프리헨션이다.
a = [i for i in range(1,11)]
print(a)
❔ 문제 : 아래의 다양한 list comprehension 문제들을 코드로 구현하시오.
[1] list comprehension 괄호([])를 사용하지 않고 list() 와 for 문으로 1~10까지의 리스트를 만들어보시오.
a = list(i for i in range(1,11))
print(a)
[2] 1~10까지의 수를 list comprehension으로 각 숫자를 제곱한 값을 저장하는 리스트를 만들어보시오.
# 방법1
a1 =[]
for i in range(1,11):
b1.append(i**2)
if i == 10:
print(b1)
# 방법2
a2 = [i ** 2 for i in range(1,11)]
print(b2)
# 방법3
a3 =[pow(i, 2) for i in range(1,11)] # pow(밑,지수)함수를 이용해 제곱근 구하기
print(b3)
[3] 위 2번 문제에서 5의 제곱 값은 제외하고 출력시키시오.
a = [i**2 for i in range(1,11) if i != 5]
[4] if 조건문을 사용하여 1~50까지의 수에서 짝수, 홀수만 저장하는 리스트를 각각 만들어보시오.
# 홀수
a1 =[]
for i in range(1,51):
if i % 2 != 0:
lst1.append(i)
if i >= 49:
print(a1)
# 짝수
a2 =[]
for i in range(1,51):
if i % 2 == 0:
lst2.append(i)
if i >= 50:
print(a2)
중첩 for 반복문 사용법
❔ 문제 : a = [ i, j for i in range(3) for j in range(3)] 왼쪽의 list comprehension 결과를 말해보시오.
✔ 에러가 난다. 에러가 나지 않게 하려면 아래와 같이 튜플 형태로 묶어 주어야 한다.
a = [(i,j) for i in range(3) for j in range(3)]
위 코드를 출력하면 역시 아래와 같이 튜플형태로 출력된다.
# 출력결과
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
💡 딕셔너리(dict)
딕셔너리란?
키(key)와 값(value)이 하나의 쌍으로 이루어진 데이터 값이다. {key : value}
딕셔너리의 특징
- 순서가 없고, value값 수정이 가능하다.
- 입력한 데이터 값에 접근할 때는 key를 사용하여 접근한다. (index를 이용한 접근 불가능)
- key 값은 중복으로 입력은 가능하나 기존 값이 대체되어 출력되며 변경이 불가능하다. 중복도 안되고 변경도 불가능. - - value값은 중복이 가능하고 변경도 가능하다.
- 숫자, 문자 외에도 리스트와 같은 배열 객체로도 데이터 입력이 가능하다.
딕셔너리 선언
dict = {}
데이터 입력
dict['name'] = '홍길동'
dict['age'] = 25
dict['hp'] = '010-1234-5678'
dict['address'] = '서울시 어쩌구 어쩌구동'
데이터 출력
key값으로 value값에 접근한다. 아래와 같은 경우에는 '홍길동'이 출력될 것이다.
print(dict['name'])
반복문을 사용한 출력 - key만 출력
for i in dict.keys():
반복문을 사용한 출력 - value만 출력
for i in dict.values():
key, value 모두 출력
key와 value를 모두 출력할 경우, 튜플 형태로 출력된다.
for i in dict.items():
빈 딕셔너리 생성하는 법
a = dict()
b = {}
가독성
dict = {
'name' : '홍길동',
'age' : 25
'hp' : '010-1234-5678'
'address' : '서울시 어쩌구 어쩌구동'
}
중첩 딕셔너리(Nested Dictionary)
딕셔너리 안에 다시 딕셔너리가 들어갈 수 있다.
dict = {
'name' : '홍길동',
'age' : 25
'pastime' : {
'reading' : 30,
'walking' : 60
}
}
중첩 딕셔너리에는 아래와 같이 접근한다.
print(dict[pastime]) # key와 value 모두 출력됨
print(dict[pastime][reading]) # reading의 value값이 출력됨
딕셔너리에 요소 추가, 수정, 삭제하기
dict['age'] = 22 # 삽입
dict['age'] = 33 # 수정
del dict['age'] # 삭제
📌 다음주 계획
- <Python 100 문제풀이 Part.2 - 함수> 강의 듣기
- <Jump To Java> 04장 공부하기
- 생활코딩 WEB1 공부하기
'자격증 및 기타 활동 > 여름방학 스터디(Python)' 카테고리의 다른 글
[5주차] Python 100 문제풀이 Part.3 - 알고리즘, 문자열 (0) | 2021.08.05 |
---|---|
[4주차] Python 100 문제풀이 Part.3 - 모듈 (0) | 2021.07.29 |
[3주차] Python 100 문제풀이 Part.3 - OOP (0) | 2021.07.22 |
[2주차] Python 100 문제풀이 Part.2 - 함수 (0) | 2021.07.15 |