Study/파이썬[Python]

파이썬[Python] | 파이썬의 자료형

jaeyeong 2023. 5. 26. 11:27

수 자료형

데이터는 모든 수로 표현할 수 있으며, 일반적으로 정수실수가 많이 사용된다.

 

정수형

양의 정수, 음의 정수, 0으로 이루어진 정수를 다루는 자료형

 

실수형

소수점 아래의 데이터를 포함하는 자료형

소수부 또는 정수부가 0인 소수는 0을 생략할 수 있다.

# 소수부가 0일 때
a = 5.
print(a) # 5.0

# 정수부가 0일 때
b = -.7
print(b) # -0.7

 

E나 e를 이용하여 지수 표현을 할 수 있는데, e 다음에 오는 수는 10의 지수를 의미한다.

1e9 = 10의 9 제곱

 

컴퓨터 시스템은 수 데이터를 처리할 때 2진수를 이용하는데, 실수의 경우 정확히 표현을 할 수 없다.

 

만약 0.3 + 0.6을 한다고 할 때 10진수 체계에서는 0.9로 딱 떨어지는데

2진수 체계에서는 0.9정확히 표현할 수 있는 방법이 없다고 한다.

(실제로 replit을 통해 파이썬 환경에서 print(0.3 + 0.6)을 해보면 0.8999999999999999라는 값이

출력되는 것을 확인했다.)

 

그래서 소수점 값을 비교해야 할 때 반올림 함수인 round()를 이용하여 처리한다.

a = 0.3 + 0.6 #0.8999999999999999

if round(a, 4) == 0.9:
  print('통과')
else:
  print('실패')

보통 소수점 다섯 번째 자리에서 반올림한 결과가 같으면 정답 처리를 하며,

위 소스코드는 '통과'가 출력된다.

 

수 자료형의 연산

  • 사칙연산: +, =, *, /
  • 나누기 연산자(/): 나누어진 결과를 실수형으로 처리
  • 몫 연산자(//): 나누어진 결과의 몫을 반환
  • 나머지 연산자(%): 나누어진 결과의 나머지를 반환
  • 거듭제곱 연산자(**): x**y는 x의 y제곱을 의미

리스트 자료형

여러 개의 데이터를 연속적으로 담아 처리할 때 주로 사용한다.

리스트를 선언할 땐 대괄호([])를 사용하거나 list()를 사용한다.

 

만약 n개의 모든 값이 0인 1차원 리스트를 초기화할 땐 아래 소스코드처럼 간단하게 초기화할 수 있다.

n = 3
a = [0] * 3
print(a) #[0, 0, 0]

자바스크립트를 사용해 온 나는 [0] * 3을 봤을 때 굉장히 놀랐다. 이렇게 초기화할 수 있다니...

 

슬라이싱

리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때 사용한다.

대괄호 안에 콜론(:)을 사용하여 시작 인덱스, 끝 인덱스를 설정하면 된다.

 

만약 리스트에서 두 번째부터 네 번째까지의 데이터를 가져오고 싶다면 아래 소스코드처럼 코드를 작성할 수 있다.

a = [1,2,3,4,5,6,7,8,9]
print(a[1:4]) #[2, 3, 4]

이때 인덱스는 0부터 시작하며 끝 인덱스는 -1을 뺀 인덱스까지 가져오게 되는 점을 알아둬야 한다!

 

컴프리헨션

리스트를 초기화하는 방법 중 하나이며 대괄호 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있다.

#컴프리헨션 이용 전
array = []
for i in range(20):
  if i % 2 == 1:
    array.append(i)
    
#컴프리헨션 이용
a = [i for i in range(20) if i % 2 == 1]

print(array) #[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(a) #[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

다트에서 배열 안에 반복문 또는 조건문을 넣어서 반복하여 원소를 추가하거나,

조건을 통과하면 리스트에 포함시키는 Collection for, Collection if가 생각났다. [글 확인하기]

 

그렇지만 다트보다 가독성이 떨어져 처음엔 이해가 잘 안 됐는데, 먼저 조건문 또는 반복문을 통해 추가할 원소의 변수를 맨 앞에 작성하고

뒤에 조건문 또는 반복문을 쓰는 것임을 깨닫고 이해를 했다.

 

컴프리헨션은 특히 특정한 크기를 가지는 2차원 리스트를 초기화할 때 이용하면 편리하다.

n = 3
m = 4
array = [[0] * m for _ in range(n)]

print(array) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

 

메서드

  • append(값): 리스트에 원소를 하나 추가할 때 사용
  • insert(인덱스, 값): 특정 인덱스 위치에 원소를 추가할 때 사용
  • remove(값): 특정 값을 갖는 원소를 제거할 때 사용 (여러 개일 시 하나만 제거된다.)
  • count(값): 리스트에서 특정 값을 가지는 데이터의 개수를 셀 때 사용
  • sort(): 오름차순으로 정렬할 때 사용
  • sort(reverse = True): 내림차순으로 정렬할 때 사용
  • reverse(): 리스트의 원소 순서를 모두 거꾸로 뒤집을 때 사용

문자열 자료형

문자열은 자바스크립트와 크게 다른 점이 없어 보여서 기본적인 내용은 제외하였고,

다른 점이 하나 보여서 이 부분은 남겨두려고 한다!

 

문자열을 반복할 때 자바스크립트에서는 'a' * 3을 하면 NaN이 반환된다.

하지만 파이썬에서는 문자열이 반복되어 aaa가 반환된다.


튜플 자료형

리스트와 비슷하지만

  1. 한 번 선언된 값을 변경할 수 없고,
  2. 리스트는 대괄호를 사용하지만, 튜플은 소괄호(())를 사용한다.

는 차이점이 있다.

 

변경하면 안 되는 값이 변경되는 것을 방지할 수 있으며 리스트에 비해 상대적으로 공간 효율이 높다고 한다.


사전(dictionary) 자료형

키와 값의 쌍을 데이터로 가지는 자료형이다.

리스트와 튜플은 값을 순차적으로 저장한다는 특징이 있는 반면에 사전 자료형은 순서대로 저장하는 게 아니라 키-값 쌍을 저장한다.

data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'

print(data) #{'사과': 'Apple', '바나나': 'Banana'}

자바스크립트의 object와 비슷해 보인다.

 

dictionary 안에 찾아야 하는 원소가 있는지 확인할 때는 아래 소스코드처럼 작성할 수 있다.

if '바나나' in data:
  print('바나나 데이터가 존재합니다! 바나나 = Banana~')

 

key 또는 value만 별도로 뽑아내는 방법은 자바스크립트와 비슷하다.

# key만 담은 리스트
data_keys = data.keys()
print(data_keys)
# value만 담은 리스트
data_values = data.values()
print(data_values)

# 리스트를 이용하여 값을 하나씩 출력하기
for value in data_values:
  print(value) #Apple #Banana

집합 자료형

파이썬에서 집합은 다음과 같은 특징을 가지고 있다.

  1. 중복을 허용하지 않는다.
  2. 순서가 없다.

리스트와 튜플은 순서가 있어 인덱싱을 하면 값을 얻을 수 있지만, 집합은 그렇지 못하다.

또한 키-값 쌍을 이루지 않고 값만 가지고 있기 때문에 dictionary처럼 사용하지 못한다.

 

집합 자료형은 특정 데이터가 이미 나온 적이 있는지에 대해 확인할 때 유용하다.

 

초기화하는 방법은 set()을 사용하거나 중괄호({})를 사용하면 된다.

# set() 사용
data = set([1,1,2,2,3,3,4,4,5,6])
print(data) #{1, 2, 3, 4, 5, 6}

# 중괄호 사용
data = {2,2,2,2,3,3,3,3,4}
print(data) #{2, 3, 4}

자바스크립트의 Set()과 비슷한 역할을 하는 것 같다.

 

연산

  1. 합집합: |
  2. 교집합: &
  3. 차집합: -
a = set([1,1,2,2,3,3,4,4,5,6])
b = set([2,2,2,2,3,3,3,3,4])

# 합집합
print(a|b) #{1, 2, 3, 4, 5, 6}

# 교집합
print(a&b) #{2, 3, 4}

# 차집합
print(a-b) #{1, 5, 6}

 

메서드

  • add(): 집합 데이터에 값을 추가
  • update(): 집합 데이터에 여러 개의 값을 추가
  • remove(): 특정 값을 제거
a = set([1,1,2,2,3,3,4,4,5,6])

a.add(9)
print(a) #{1, 2, 3, 4, 5, 6, 9}

a.update([11,12,13])
print(a) #{1, 2, 3, 4, 5, 6, 9, 11, 12, 13}

a.remove(9)
print(a) #{1, 2, 3, 4, 5, 6, 11, 12, 13}