리스트와 반복문
파이썬에서 리스트의 의미는 여러가지 자료를 저장할 수 있는 자료이다.
지금까지 숫자, 문자, 수식 등 개별적이고 독립적인 '자료'를 다루었다면, 리스트는 이러한 자료들을 모아서 사용할 수 있게 해주는 특별한 형태의 자료이다.
리스트를 선언하고 요소에 접근하기
파이썬에서 리스트를 생성하는 방법은 대괄호[]에 자료를 쉼표로 구분해서 입력하는 것이다.
대괄호 [] 내부에 넣는 자료를 요소라고 하고, 영어로는 element 라고 부른다.
리스트는 한가지 자료형만으로 구성할 수도 있고, 여러 종류의 자료형을 구성할 수도 있다.
list_a=[273,32,103,"문자열",True,False]
위와 같이 리스트를 선언하고, 해당 리스트 안에 있는 요소들을 각각 사용하려면 리스트 이름 바로 뒤에 대괄호[] 를 입력하고, 자료의 위치를 나타내는 숫자를 입력한다.
이 때 리스트 기호인 대괄호[] 안에 들어간 숫자를 인덱스 Index 라고 부른다
자료 | 273 | 32 | 103 | 문자열 | True | False |
위치 | 0 | 1 | 2 | 3 | 4 | 5 |
list_a의 인덱스 값을 활용하여 아래와 같이 리스트의 특정 요소를 확인, 변경할 수 있다.
list_a=[273,32,103,"문자열",True,False]
print(list_a[3]) # list_a의 3번째 요소인 문자열 출력
list_a[0] = "변경" # list_a의 0번째 요소를 "변경"으로 변경
print(list_a) # '변경',32,103,'문자열',True,False 출력
위 예제 외에도 리스트는 다양한 방법으로 활용이 가능하다.
① 대괄호 안에 음수를 넣어 뒤에서부터 요소를 선택할 수 있다.
list_a=[273,32,103,"문자열",True,False]
list_a[-1] # list_a의 -1번째 요소인 False 선택
list_a[-2] # list_a의 -2번째 요소인 True 선택
② 리스트 접근 연산자를 이중으로 사용할 수 있다.
아래의 예제에서 list_a[3] 을 지정하면 "문자열"을 꺼내온다.
이 때 list_a[3][0]을 지정하면 3번째 가져온 "문자열"에서 다시 0번째 문자를 가져와 출력할 수 있다.
list_a=[273,32,103,"문자열",True,False]
print(list_a[3]) # 문자열 출력
print(list_a[3][0]) # 문 출력
print(list_a[3][1]) # 자 출력
print(list_a[3][:2]) # 문자 출력
③ 리스트 안에 리스트를 사용할 수 있다.
list_a = [[1,2,3], [4,5,6], [7,8,9]]
print(list_a[1]) # [4,5,6] 출력
print(list_a[1][2]) # 6 출력
* 리스트에서의 Index Error 예외
: 리스트의 길이를 넘는 인덱스로 요소에 접근하려고 할 때 발생되는 예외
리스트 연산하기: 연결(+), 반복(*), len()
list_a = [1,2,3]
list_b = [4,5,6]
print("list_a = ", list_a) #list_a = [1,2,3] 출력
# 리스트 연결하기
print("list_a + list_b =", list_a + list_b) #list_a + list_b = [1,2,3,4,5,6] 출력
# 리스트 반복하기
print("list_a * 2 =", list_a * 2) # list_a * 2 = [1,2,3,1,2,3] 출력
# 리스트 길이(요소의 개수) 구하기 len()
print("len(list_a) = ", len(list_a))
리스트에 요소 추가하기: append(), insert()
list_a = [1,2,3]
# 리스트 뒤에 요소 추가하기 : append(값)
list_a.append(4)
list_a.append(5)
print(list_a) # [1,2,3,4,5] 출력
# 리스트 중간에 요소 추가하기 insert(인덱스,값)
list_a.insert(0,10)
list_a.insert(3,20)
print(list_a) # [10,1,2,20,3,4,5] 출력
# 한번에 여러 요소 추가하기 : extend([값1,값2])
list_a.extend([6,7,8,9])
print(list_a) # [10,1,2,20,3,4,5,6,7,8,9] 출력
append() 함수는 현재의 리스트 뒤쪽에 요소를 추가한다.
insert(삽입할위치,삽입할값) 함수는 괄호 안에서 정해준 위치에 요소를 삽입한다.
extend([값1,값2]) 함수는 한번에 여러 요소를 추가하고 싶을 때 사용한다.
리스트 연결 연산자와 요소 추가의 차이
리스트 연결연산자와 extend() 함수는 리스트와 리스트를 연결한다는 기능은 동일하지만 한가지 큰 차이가 있다.
list_a = [1,2,3]
list_b = [4,5,6]
print(list_a+list_b) # [1,2,3,4,5,6] 출력
print(list_a) #[1,2,3] 출력
print(list_b) #[4,5,6] 출력
print(list_a.extend(list_b)) # [1,2,3,4,5,6] 출력
print(list_a) #[1,2,3,4,5,6] 출력
print(list_b) #[4,5,6] 출력
위 예제를 통해 볼때 리스트 연결 연산자 만으로는 list_a에 직접적인 영향을 주지 않는 반면,
extend() 함수를 사용하면 list_a에 직접적으로 영향을 준다.
리스트 연결 연산자와 같이 원본에 어떠한 영향도 주지 않는 것을 '비파괴적'이라고 하고,
append(), insert(), extend() 함수와 같이 리스트에 직접적인 영향을 주는 함수 또는 연산을 파괴적이라고 한다.
비파괴적으로 사용하면 원본과 새로운 결과를 모두 활용할 수 있어 선택지가 넓기 때문에 더 편리하며, 기본 자료형(숫자, 문자열, 불)과 관련된 모든 것들은 비파괴적으로 동작한다.
하지만 리스트의 용량이 매우 커질 수 있기때문에 파이썬 프로그래밍언어는 원본을 직접적으로 조작하는 기능을 제공한다.
리스트에 요소 제거하기
리스트의 요소를 제거하는 방법은 크게 '인덱스로 제거하기'와 '값으로 제거하기'로 구분할 수 있다.
①인덱스로 제거하기: del 키워드, pop()
인덱스로 제거한다는 것은 요소의 위치를 기반으로 요소를 제거하는 것이며 아래와 같은 구문으로 요소를 제거한다.
- del 리스트명[인덱스]
- 리스트명.pop(인덱스)
list_a = [1,2,3,4,5]
del list_a[1]
print("del list_a[1]: ",list_a) # [1,3,4,5] 출력
list_a.pop(2)
print("pop(2): ",list_a) # [1,3,5] 출력
list_b = [0,1,2,3,4,5,6]
del list_b[3:6] #[3:6]을 지정하면 마지막 요소는 포함되지 않는다는 것을 유의하자.
print(list_b) # [0,1,2,6] 출력
list_c = [0,1,2,3,4,5,6]
del list_c[:3] # 인덱스 3기준 왼쪽 모두 제거
print(list_c) # [3,4,5,6] 출력
* 리스트 슬라이싱
- 리스트에 [:] 연산자로 리스트 범위를 지정하여 여러 요소를 선택하는 것을 슬라이싱이라고 한다.
- 리스트 슬라이싱은 리스트[시작_인덱스:끝_인덱스:단계] 와 같은 형태로 사용한다.
- 단계를 사용하면 지정한 숫자만큼 인덱스를 건너뛰며 요소를 가져온다.
numbers = [1,2,3,4,5,6,7,8]
print(numbers[0:5:2]) # [1,3,5] 출력 (인덱스 0~5까지, 인덱스를 2씩 건너뛰며 슬라이싱)
numbers = [1,2,3,4,5,6,7,8]
print(numbers[::-1]) # [8,7,6,5,4,3,2,1] 출력 (시작/끝인덱스는 자동으로 전부가 지정된다)
② 값으로 제거하기: remove()
리스트 내부의 값을 지정해서 제거하는 방법으로 remove()함수를 이용한다.
- 리스트.remove(값)
- remove() 함수로 지정한 값이 리스트 내부에 여러개 있는 경우 가장 먼저 발견되는 하나만 제거한다.
list_a = [1,2,1,2]
list_a.remove(2)
print(list_a) # [1,1,2] 출력
③ 모두 제거하기: clear()
리스트 내부의 모든 요소를 제거할 때에는 clear()함수를 사용한다.
- 리스트.clear()
리스트 정렬하기
리스트 요소를 정렬하고 싶다면 sort() 함수를 사용하며 기본 오름차순 정렬로 적용된다.
- 리스트.sort() #오름차순 정렬
- 리스트.sort(reverse=True) # 내림차순 정렬
list_a = [52,273,103,32,275,1,7]
list_a.sort() #오름차순 정렬
print(list_a)
list_a.sort(reverse=True) #내림차순 정렬
print(list_a)
리스트 내부에 있는지 확인하기: in/not in 연산자
파이썬은 in연산자를 활용하여 특정 값이 리스트 내부에 있는지 확인할 수 있다.
- 값 in 리스트
- 값 not in 리스트
list_a = [52,273,103,32,275,1,7]
print(273 in list_a) #True 출력
print(80 in list_a) #False 출력
print(273 not in list_a) #False 출력
print(80 not in list_a) #True 출력
for 반복문 : 리스트와 함께 사용하기
for 반복자 in 반복할 수 있는것:
반복 실행할 코드
for 반복문의 기본형태는 위와 같으며, 반복할 수 있는 것에는 문자열, 리스트, 딕셔너리, 범위 등이 있다.
array = [273,32,103,57,52]
for element in array:
print(element)
for 반복문은 리스트에 있는 요소 하나하나가 element 변수에 들어가며 차례차례 반복하게 된다.
print()함수로 element를 출력하므로 리스트의 요소를 하나씩 출력하게 되는 것이다.
중첩리스트와 중첩 반복문
반복문을 여려겹 중첩해 사용하면 중첩 반복문이라고 부르며, 중첩 반복문은 일반적으로 n-차원 처리를 할때 사용한다.
- 1차원 리스트 [1,2,3]
- 2차원 리스트 [[1,2,3],[4,5,6]]
- n-차원 리스트 요소를 모두 확인하려면 반복문을 n번 중첩해야한다.
- 2차원 리스트에 반복문 한번 사용하기
list_of_list = [
[1,2,3],
[4,5,6,7],
[8,9]
]
for items in list_of_list:
print(items) # [1,2,3] / [4,5,6,7] / [8,9] 출력
-2차원 리스트에 반복문 두번 사용하기
list_of_list = [
[1,2,3],
[4,5,6,7],
[8,9]
]
for items in list_of_list:
for item in items:
print(items)
# [1,2,3] / [1,2,3] / [1,2,3]
# [4,5,6,7] / [4,5,6,7] / [4,5,6,7] / [4,5,6,7]
# [8,9] / [8,9] 출력
전개 연산자
전개연산자는 리스트 앞에 * 기호를 사용하여 작성하며 전개 연산자를 사용하면 리스트 내용을 전개해서 사용할 수 있다.
전개연산자는 기본적으로 리스트 내부 혹은 함수의 매개변수 위치에 사용한다.
먼저 리스트 내부에 전개 연산자를 사용하는 예시를 살펴보자.
list_a = [1,2,3,4]
list_b = [*list_a, *list_a]
print(list_b) #[1,2,3,4,1,2,3,4] 출력
list_a=[1,2,3,4]
list_b = [*list_a, 5] # list_a 전개 후 5 요소 추가
print(list_b) #[1,2,3,4,5] 출력
전개 연산자를 사용하면 리스트에 요소를 추가할 때 코드를 비파괴적으로 구현할 수 있다.
함수의 매개변수 위치에 전개연산자를 사용하는 예시는 아래와 같다.
list_a = [1,2,3,4]
print(*list_a) # 1 2 3 4 출력
리스트 안에 사용하는것과 마찬가지로 리스트 요소를 하나하나 입력하는 것처럼 전개된다.
딕셔너리와 반복문
리스트가 인덱스를 기반으로 값을 저장하는 것이라면 딕셔너리(dictionary)는 키를 기반으로 값을 저장하는 것이다.
자료형 | 의미 | 가리키는 위치 | 선언형식 |
리스트 | 인덱스를 기반으로 값을 저장 | 인덱스 | 변수 = [] |
딕셔너리 | 키를 기반으로 값을 저장 | 키 | 변수 = {} |
딕셔너리 선언하고 요소에 접근하기
딕셔너리는 중괄호{}로 선언하며, 키:값 형태를 쉼표(,)로 연결해서 만든다.
키는 문자열, 숫자, 불 등으로 선언할 수 있으나 일반적으로 문자열로 사용하는 경우가 많다.
dict_a = {
"name":"어벤져스",
"cast": ["아이언맨","타노스","토르"]
}
딕셔너리 요소에 접근할 때는 리스트처럼 딕셔너리 뒤에 대괄호[]를 입력하고 내부에 인덱스처럼 키를 입력한다.
이 때 주의할 점은 딕셔너리를 선언할 때는 중괄호{}를 사용하지만,
딕셔너리 요소에 접근할때는 리스트처럼 딕셔너리 뒤에 대괄호[]를 입력하고 내부에 인덱스처럼 키를 입력한다는 점이다.
dict_a = {
"name":"어벤져스",
"cast": ["아이언맨","타노스","토르"]
}
print(dict_a) # {'name': '어벤져스', 'cast': ['아이언맨', '타노스', '토르']} 출력
print(dict_a["name"]) # 어벤져스 출력
print(dict_a["cast"]) # ['아이언맨','타노스','토르'] 출력
딕셔너리 내부의 값에 문자열, 숫자, 불, 리스트, 딕셔너리 등 다양한 자료를 넣을 수 있다.
* NameError : 파이썬은 딕셔너리의 키에 따옴표 없이 단순하게 식별자를 입력하면 이를 변수로 인식하여 오류가 발생될 수 있다.
해당 오류를 해결하기 위해 키에 따옴표를 입력하거나 name이라는 이름을 변수로 만들어주는 방법이 있다.
name="이름"
dict_a = {
name:"어벤져스",
type : "movie"
}
이 때 type은 type() 함수라는 기본 식별자가 있기때문에 이것이 키로 들어가 따로 오류가 발생되지는 않는다.
딕셔너리에 값 추가하기/제거하기
딕셔너리에 값을 추가할때는 키를 기반으로 값을 입력한다.
- 딕셔너리["새로운 키"] = "새로운 값" : 새로운 값이 추가 된다.
- 딕셔너리["기존 키"] = "새로운 값" : 기존 키에 해당하는 값을 새로운 값으로 대치한다.
딕셔너리 요소를 제거할 때는 del 키워드를 사용하여 특정 키를 지정하면 해당 요소가 제거된다.
- del 딕셔너리["제거할 키"]
dictionary = {
"name" : "건망고",
"type" : "당절임",
"origin" : "필리핀",
"ingredient" : ["망고","설탕"]
}
dictionary["price"] = 5000 # price : 5000 값 추가
dictionary["name"] = "건조 파인애플" # name : "건망고"->"건조 파인애플" 대치
del dictionary["ingredient"] # indegredient 요소 제거
*KeyError : 딕셔너리에 존재하지 않는 키에 접근하면 KeyError가 발생된다.
딕셔너리 내부에 키가 있는지 확인하기: in 키워드 / get() 함수
파이썬은 in 키워드를 활용하여 특정 값이 딕셔너리 내부에 있는지 확인할 수 있다.
- "키" in 딕셔너리
dictionary = {
"name" : "건망고",
"type" : "당절임",
"origin" : "필리핀",
"ingredient" : ["망고","설탕"]
}
print("color" in dictionary) #False
print("필리핀" in dictionary) #False
get()함수는 딕셔너리의 키로 값을 추출하는 기능으로 딕셔너리[키]를 입력할 때와 같은 기능을 수행하지만,
존재하지 않는 키에 접근할 경우 KeyError를 발생시키지 않고 None을 출력한다.
dictionary = {
"name" : "건망고",
"type" : "당절임",
"origin" : "필리핀",
"ingredient" : ["망고","설탕"]
}
print(dictionary.get("name")) # 건망고 출력
print(dictionary.get("건망고")) # None 출력
for 반복문 : 딕셔너리와 함께 사용하기
for 키 변수 in 딕셔너리:
코드
위와 같이 for반복문과 딕셔너리를 조합해서 사용할 수 있는데 이 때 딕셔너리 내부에 있는 키가 변수에 들어가는 것에 유의해야한다.
dictionary = {
"name" : "건망고",
"type" : "당절임",
"origin" : "필리핀",
"ingredient" : ["망고","설탕"]
}
for key in dictionary:
print(key,":", dictionary[key])
#name : 건망고
#type : 당절임
#origin : 필리핀
#ingredient : ['망고', '설탕'] 출력
'Spec UP - Backend > 혼자 공부하는 파이썬' 카테고리의 다른 글
chap_04-4. 문자열, 리스트, 딕셔너리와 관련된 기본 함수 (0) | 2023.10.26 |
---|---|
chap_04-3. 범위 자료형과 while 반복문 (0) | 2023.10.13 |
chap_03. 조건문 (0) | 2023.08.31 |
chap_02. 숫자와 문자열의 다양한 기능 (0) | 2023.07.31 |
chap_02. 변수 (1) | 2023.07.31 |
댓글