본문 바로가기
IVS/Python 프로그래밍

[Python] 리스트, 함수, 딕셔너리, 튜플

by 코곰_ 2024. 12. 17.

I. 리스트(List)

for 순회 방식

1. indexing 방식 
index로 순회
arr = [1, 5, 4, 7]

for i in range(4):
	print(arr[i], end = '')
#1547

 

2. iterator 방식
값 자체를 직접 순회
파이썬에서 권장되는 방식
arr = [1, 5, 4, 7]

for num in arr:
	print(num, end = '')
#1547

 

 

 

 

리스트 초기화

파이써닉(Pythonic) 하다

= 더 간결하고/ 가독성이 좋고/ 의도가 들어나는 명확함

arr = []
for i in range(6):
	arr.append(0)
    
arr = [0] * 6 # 권장되는 방식

 

 

 

리스트 출력

unpacking: 여러개의 객체를 포함하고 있는 하나의 객체를 풀어줌

arr = [5, 6, 7, 8, 9]

for num in arr:
	print(num, end = ' ')

print(*arr) #unpacking

# 5 6 7 8 9

 

리스트 역순 순회

c.f) 슬라이싱

for i in arr[::-1]
	print(i, end = ' ')

 

 

리스트 컴프리핸션

컴프리핸션
패턴이 있는 list, dictionary, set을 보다 간단하게 작성

리스트 생성

# value가 0이고, 5개의 요소로 이루어진 1차원 배열
arr1 = [0] * 5
arr2 = [0 for _ in range(5)]

print(arr2) [0, 0, 0, 0, 0]
# 2차원 배열 생성
arr = [[0 for _ in range(cols)] for _ in range(rows)]

 

 

조건을 설정하여 리스트 생성

# 1부터 10까지 숫자 중 짝수만 순차적으로 들어있는 리스트 생성
arr = []
for n in range(1, 11):
	if (n%2 == 0):
    	arr.append(n)

# 컴프리핸션 문법을 통한 방법
arr = [x for x in range(1, 10+1) if x % 2 == 0]
print(arr)

 

 

 

 

 

 

II. 함수

지역변수

- 함수 안에 만들어지는 변수

- 함수 밖에서 사용 X

 

 

전역변수

- 함수 밖에서 만든 변수

- 읽을 수만 있고, a 값을 함수 안에서 수정할 수 없음

 

전역변수를 수정하고 싶을 때, global 키워드 
a = 100

def abc():
	global a # 함수 내에서, 전역변수를 수정하고 싶을 때 
    a = 300
    print(a) #300
    
def bts():
	print(a) #300
    
 abc()
 bts()

 

 

Parameter vs Argument

def 함수명(매개변수):
	code
    return 반환값
    
함수명(함수인자)

 

 

 

 

 

 

 

 

III. 딕셔너리(Dictionary)

Q. 딕셔너리를 사용하는 이유?

A. 문자열, 음수 값을 index로 사용하기 위해

 

딕셔너리 초기화

# case 1
a = dict()

a['HI'] = 55
a['BBQ'] = 'KFC'

# case 2
a = {'HI': 55, 'BBQ': 'KFC'}

 

 

 

 

딕셔너리의 특징
가변형 비시퀀스

 

- 가변형 = 값이 변할 수 있음

- 비 시퀀스 = 순서가 없다

- C++에서는 Unordered_map

 

 

 

Q. 딕셔너리는 for문으로 어떻게 순회할까?

A. key를 기준으로 순회 

for key in a:
	print(key)

 

 

 

 

Counter로 활용하기

Dict 사용하여 최빈수 문자열 출력하기 

arr = ['MC', 'BTS', 'BTS', 'MC', 'BTS']
# 초기화
di = dict() # {'MC': 2, 'BTS': 3}
for x in arr:
    di[x] = 0
for x in arr:
    di[x] += 1

mx = 0
ret = ''

# dict_items([('MC', 2), ('BTS', 3)])
for word, cnt in di.items():
    if cnt > mx:
        mx = cnt
        ret = word

print(word)

 

 

 

 

유의사항

Key 공간을 만들어 두어야, 이후에 값을 대입할 수 있다.

값을 대입하면, 간단히 Key에 해당하는 공간을 생성할 수 있다.

arr = ['ABE', 53, -99, -99, 124]

di = dict() # 초기화

# key 값이 존재하는지 확인
# case 1)
for i in arr: 
    di[str(i)] = 0

for i in arr:
    di[str(i)] += 1

# case2) 멤버십 연산자 활용
for i in arr:
    if(i not in di):
        di[i] = 0
    di[i] += 1

 

 

 

 

 

 

 

IV. 튜플(Tuple)

내부 값을 변경할 수 없는 "단 하나의 값 덩어리"

 

 

Q. 튜플은 언제 사용할까?

A. 여러개의 값을 리턴하고 싶을 때. 튜플하나의 값을 리턴

a, b, c = 1, 2, 3
def func():
	return a, b, c
    
print(func()) # (1, 2, 3) 튜플로 리턴

 

 

시퀀스 자료형
- indexing 방식으로 순회가 가능하다
- 리스트, 문자열, 튜플

 

Q. 리스트 vs 튜플?

A. 튜플은 수정이 불가능하다. 

Tuple은 하나의 값 덩어리이므로, 내부의 값(element)를 수정할 수 없다. 

 

 

 

따라서, (return) 값을 수정하고 싶다면, 리스트로 반환해야 한다.

def func():
	return [1, 2, 3]
 
 a = func()
 print(a) # [1, 2, 3]

 

 

튜플을 쓰는 이유
1. 성능: 리스트보다 성능이 빠르다. 
2. 안전성: 다른 개발자가 임의로 내부 값을 수정할 수 없어, 안전한 프로그래밍 가능

 

 

 

 


 

Tip

하드코딩: 수 및 데이터를 입력 없이 소스코드에 타이핑으로 적어두는 것

 

헷갈려서 쓰는.. 파이썬 괄호

[ ]: 리스트(List)
  • 수정이 가능(mutable)

 

( ): 튜플(Tuple)
  • 수정이 불가능(immutable)
  • 여러 개의 값을 한 번에 다루기 위한 컨테이너 데이터타입 중 하나

 

{ }: 셋(Set)
  • 집합의 형태를 쉽게 처리하기 위한 데이터타입
  • 딕셔너리와 유사하나 키(key)가 없음
  • 중복을 허용하지 않고 순서가 없다.

 

{ }: 딕셔너리(Dictionary)
  • 여러 개의 값을 한 번에 다루기 위한 컨테이너 데이터타입
  • key-value 쌍의 형태
  • 값(value)는 수정 가능

 

 

정렬

arr = [6, 3, 9]

# 리스트 정렬
arr.sort() 
print(arr) # [3, 6, 9]

# 리스트 역정렬
arr.sort(reverse=True)
print(arr) # [9, 6, 3]