전공과목 정리/프로그래밍언어 (Python, C++)

[파이썬프로그래밍🐍] 리스트, 튜플, 딕셔너리, 세트

최연재 2022. 1. 29. 22:50

출처 : 두근두근 파이썬, 파이썬 for Beginner

-------

개발 블로그를 티스토리로 옮기며 기존의 네이버 블로그에 작성한 내용을 그대로 옮겼습니다.

https://blog.naver.com/0yeonjae2/222594248504

-------

 

c/c++나 자바같은 프로그래밍 언어에는 리스트가 없고 배열을 사용한다. 리스트는 정수, 문자열, 실수 등 서로 다른 데이터형도 하나로 묶을 수 있지만, 배열은 동일한 데이터형만 묶을 수 있다.

 

1. 리스트

여러 개의 데이터를 하나로 묶어서 저장하는 것이 필수적인 경우에 사용한다.

 

1) 리스트 생성 및 내용 추가

리스트명 = [] # 공백 리스트 생성

리스트명.append("추가할 내용") # 내용 추가

리스트명.insert(삽입할 위치 인덱스, "추가할 내용") # 번호 위치에 내용 추가

 

2) 객체

파이썬에서 객체는 관련된 변수와 함수를 묶은 것이다.

파이썬에서 리스트는 객체이므로 객체 안에 있는 무언가를 사용할 때는 객체의 이름을 쓰고 점(.)을 붙인 후 함수의 이름을 적는다.

 

3) 리스트 항목 접근하기

listA = ["ㄱ", "ㄴ","ㄷ"]

listA[0] == "ㄱ"

listA[1] == "ㄴ"

list[2] == "ㄷ"

 

- 슬라이싱

[start : stop : step]

start부터 stop까지 step만큼 건너뛰며 출력

 

4) 리스트 항목 변경하기

>>>listA = ["ㄱ", "ㄴ","ㄷ"]

>>>listA[0] = "ㄹ"

>>>print(listA)

["ㄹ", "ㄴ", "ㄷ"]

 

5) 리스트 복사하기

import copy

listA = ["ㄱ", "ㄴ", "ㄷ"]

listB = copy.copy(listA)

 

혹은

 

listC = ["ㄹ", "ㅁ", "ㅂ"]

listD = listC[:]

 

6) 리스트 항목 삭제하기

(1) 특정 내용 삭제

① remove

listA = ["ㄱ", "ㄴ", "ㄷ"]

listA.remove("ㄴ")

# listA == ["ㄱ", "ㄷ"]

 

② del : 인덱스를 이용해 항목 삭제

listB = [2,3,4]

del listB[0]

# listB == [3,4]

 

③ pop : 리스트에서 마지막 항목 삭제

listC = [1,2,3,4]

listC.pop()

# listC == [1,2,3]

 

(2) 특정 범위 삭제

listA = [1, 2, 3, 4,5]

list[1:4] = []

# 2부터 4까지 삭제된다.

 

(3) 리스트 자체 삭제

listA = [1,2,3,4]

listA = []

# 텅 빈 listA라는 이름을 가진 리스트 존재

 

listB = [1,2,3,4]

listB = None

 

7) 항목이 리스트 안에 있는지 확인

listA = [1,2,3,4,5]

if 4 in listA:

실행 내용

 

8) 리스트 내 요소의 개수

len() : 리스트 요소의 개수를 정수형(int)으로 반환한다.

 

9) 리스트 탐색하기

index() : () 안에 내용을 입력하면 인덱스를 반환한다.

 

10) 리스트 관련 함수

함수
설명
사용법
append()
리스트 맨 뒤에 항목을 추가한다.
리스트명.append(값)
pop()
리스트 맨 뒤의 항목을 뺀다.
리스트명.pop()
sort()
리스트의 항목을 정렬한다.
리스트명.sort()
reverse()
리스트의 항목을 역순으로 정렬한다.
리스트명.reverse()
index()
지정된 값을 찾아 해당 위치를 반환한다.
리스트명.index(찾을값)
insert()
지정된 위치에 값을 삽입한다.
리스트명.insert(위치, 값)
remove()
리스트에서 지정한 값을 삭제한다.
지정한 값이 여러 개면 첫 번째 값만 지운다.
리스트명.remove(지울 값)
extend()
리스트 뒤에 리스트를 추가한다.
리스트명.extend(추가할 리스트)
count()
리스트에서 해당 값의 개수를 센다.
리스트명.count(찾을값)
clear()
리스트의 내용을 모두 지운다.
리스트명.clear()
del()
리스트에서 해당 위치의 항목을 삭제한다.
del(리스트명[위치])
len()
리스트에 포함된 전체 항목의 개수를 센다.
len(리스트명)
copy()
리스트의 내용을 새로운 리스트에 복사한다.
새리스트 = 리스트명.copy()
sorted()
리스트의 항목을 정렬해서 새로운 리스트에 대입한다.
새리스트 = sorted(리스트)

 

11) zip() 함수

- 동시에 여러 리스트에 접근하기

 
- 두 리스트를 튜플이나 딕셔너리로 짝지을 때

 

12) 리스트의 복사

- 얕은 복사 ; Call by reference (참조에 의한 호출)

기존의 리스트와 새로운 리스트가 동일한 메모리 공간을 공유하므로 새로운 리스트나 기존의 리스트에서 변화가 생기면 다른 리스트에도 적용된다.

 

새리스트 = 기존리스트

 

두 리스트의 내용이 동일한 것을 확인 가능

- 깊은 복사 ; Call by value (값에 의한 호출)

메모리의 공간을 복사하여 리스트를 만드므로 새로운 리스트나 기존의 리스트에서 변화가 생겨도 다른 리스트에 적용되지 않는다.

 

새리스트 = 기존리스트[:]

 

두 리스트의 내용이 다른 것을 확인 가능


2. 튜플

1) 튜플

- 튜플은 소괄호()를 이용해 생성한다.

- 값을 수정할 수 없으며, 읽기만 가능해 읽기 전용 자료를 저장할 때 사용한다.

- 소괄호를 생략할 수 있으며, 항목이 하나인 튜플은 뒤에 쉼표를 붙인다.

ex) t1 = (10,20,30) t2 = 10,20,30 t3= (10,) t4 = 10,

 

2) 튜플 자체 삭제

del(튜플 이름)

 

3) 튜플 접근

- 항목 접근 : 튜플이름[인덱스]

- 범위 접근 : 튜플이름[범위]

 

4) 튜플의 연산

- 튜플의 덧셈, 곱셈 연산

ex)

t1 = (1,2)

t2 = ("A", "B")

t1 + t2 # (1,2,"A","B")

t1 * 2 # (1,2,1,2)

 

5) 튜플의 항목 변경

: 튜플 자체는 항목 변경이 불가하므로 튜플을 리스트로 변환해 내용을 수정하고 수정한 리스트를 다시 튜플로 변환한다.

(튜플 -> 리스트 -> 튜플 ; 간접적인 방식)

tupleA = (10,20,30,40)

listA = list(tupleA)

listA.append(50)

tupleA = tuple(listA)


3. 딕셔너리

딕셔너리는 리스트와 같이 값을 저장하는 방법으로 값(value)과 키(key)가 있다.

ex) 딕셔너리이름 = {키1:값1, 키2:값2}

- 키와 값은 정해진 규정이 없다. (사용자가 지정하면 된다.)

- 딕셔너리는 순서가 없어 생성한 순서대로 딕셔너리가 구성된다는 보장이 없다.

 

1) 딕셔너리의 생성

딕셔너리 이름 = {} # 공백 딕셔너리 생성

딕셔너리 이름[키] = 값 # 내용 추가

 

student = {'학년' : 1, '이름' : '최연재'}

student['학과'] = '컴퓨터공학과'

# student == {'학년' : 1, '이름' : '최연재', '학과' : '컴퓨터공학과'}

 

2) 딕셔너리에서 탐색

- 키를 가지고 값을 찾기

ex) print(student['학년']) # 1

- 딕셔너리명.get(키) 함수를 이용해 키로 값에 접근

ex) student.get('이름') # '최연재'

 

딕셔너리명[키]와 딕셔너리명.get(키)의 결과는 같다.

차이점은 딕셔너리명[키]는 존재하지 않는 키를 호출하면 에러가 나지만 딕셔너리명.get(키)는 존재하지 않는 키를 호출하면 아무것도 반환하지 않는다.

 

3) 딕셔너리의 모든 키와 값 출력하기

딕셔너리명.keys()는 딕셔너리의 모든 키를 반환한다.

딕셔너리명.values()는 딕셔너리의 모든 값을 반환한다.

 
사진 삭제

딕셔너리명.values() 함수는 딕셔너리의 모든 값을 리스트로 만들어 반환한다.

dict_keys나 dict_values 없이 출력하려면 리스트를 이용한다. -> list(딕셔너리명.keys())

 

4) 딕셔너리의 수정

딕셔너리명[값을 변경할 키] = 변경할 값

 

5) 딕셔너리 내용 삭제

del(딕셔너리명[삭제할 키])

 

6) 딕셔너리에 동일한 키가 있는 경우

딕셔너리의 키는 유일해야 하므로 동일한 키를 갖는 딕셔너리를 생성하는 것이 아니라 마지막에 있는 키가 적용된다.

ex)

student = {'학년':1, '이름':'최연재', '학과':'컴퓨터공학과', '학년':2}

# 딕셔너리를 출력하면 {'학년':2, '이름':'최연재', '학과':'컴퓨터공학과'} 가 출력된다.

 

7) 딕셔너리를 튜플 형태로 구하기

딕셔너리명.items() 함수

 

8) 딕셔너리에 해당 키가 있는지 확인

키 이름 in 딕셔너리명

키가 존재하면 True, 없으면 False를 반환한다.


4. 세트

파이썬 2.3부터 지원하기 시작한 자료형이다.

- 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다.

- 중복을 허용하지 않으며, 순서가 없다. 인덱싱으로 값을 얻을 수 없다.

- 인덱싱을 사용하려면 리스트나 튜플로 변환 후 사용해야 한다.

 

1) 세트의 생성

setA = {}

setB = set()

 

2) 집합

- 교집합

setA & setB

setA.intersection(setB)

 

- 합집합

setA | setB

setA.union(setB)

 

- 차집합

setA - setB

setA.difference(setB)

 

- 대칭차집합

setA ^ setB

setA.symmetric_difference(setB)