[Python] 프로그래밍의 기초 : 자료형 - 숫자형(Number), 문자형(String), 리스트(List), 튜플(Tuple)
본문 바로가기
Python/기초 다지기

[Python] 프로그래밍의 기초 : 자료형 - 숫자형(Number), 문자형(String), 리스트(List), 튜플(Tuple)

by 쏠수있어ㅤ 2021. 5. 29.
반응형

자료형이란 프로그래밍을 할 때 쓰는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 말한다. 프로그래밍의 기본이자 핵심 요소다. 

 

 

1. 숫자형 ( Number ) 

수의 종류  python examples
정수 100,10,5,2,1,0,-1,-4,-10,-100
실수 5.2, 345.1, -9.44, -10.2, 3.4e10
8진수  0o34, 0o25
16진수  0x2A, 0xFF

* 8진수 : 1에서 7까지 8개의 숫자를 사용한다. 1자를 6비트로 표현하고 있는 캐릭터 머신의 비트상태를 나타내는데 유용하다. 110101을 2진수로 취급하는 건 불편함으로 3비트씩 나누어 110, 101을 8진수 65로 나타낼 수 있으며 (65)8이라고 쓴다. 숫자 0 + 알파벳 o or O (소문자or대문자) 로 시작한다. 

 

* 16진수 : 0에서 9까지 10개의 숫자에 A부터 F까지 6개의 문자를 추가한 것을 한 단위로 사용해 수를 표현하는 방식. 0~9는 10진수와 같이 사용하고 10,11,12,13,14,15는 영어 알파벳 대문자를 빌려서 A,B,C,D,E,F로 사용한다. 15를 16진수로 나타내면 F가 되고 26은 1A가 된다. 프로그래밍에서 보통 2진수를 사용하는데 자릿수가 너무 커질 경우 2진수를 4자리씩 묶어 16진수로 표기하기도 한다. 16진수는 0x 로 시작한다. ex) 0x8ff, 0xABC

 

* 4.24e10 = 4.24E10 = 4.24*10^10 (10의 10승) 

 

 

정수 Integer : 양의 정수, 음의 정수, 0

 

실수형 (Real Number) : 소수점 아래의 데이터를 포함/

소수부가 0이거나 정수부가 0인 소수는 0을 생략 가능 

ex) 0.7 = .7/ 5.0 =5. / -0.7 = -.7 

 

지수 표현 방식 (실수형 데이터로 처리됨)

ex) 1e9 == 10의 9제곱 (1,000,000,000)  10억 - 실수이니까 정수로 바꾸려면

     int(1e9) 로 해주기 

다양한 그래프 알고리즘에서 도달할 수 없는 노드에 대해 최단 거리를 무한(INF)로 설정하는데 이 때, 최댓값이 10억 미만이라면 무한(INF)값으로 1e9를 이용할 수 있다. 

ex) 75.25e1 = 752.5

ex) 3954e-3 = 3.954

 

example

 

 

 

 

숫자형으로 파이썬 해보기 

 

a = 3, b = 5 변수에 넣기 

a+b = 더하기 

a-b = 빼기

a*b = 곱하기

a/b = 나누기 

a//b = 몫을 반환

a%b = 나머지 반환

a의 b 승 (a를 b 번 곱하기) 

 

 

 

 

주의점 : / 나누기 연산자는 주의 **  나눠진 결과는 실수형으로 반환 

 

 

int() 예제

print(int(1))  #1
print(int(1.1))  #1
print(int(1.9))  #1
print(int(-1))  #-1
print(int(-1.9))  #-1
print(int(-1.1))  #-1
print(int('123'))  #123
print(int('-123'))  #-123
#print(int('123.123')) 에러
#print(int('-123.123')) 에러

 

 

 

 

 

2. 문자열 자료형 ( String ) 

문자열(Stirng) 이란 문자, 단어 등으로 구성된 문자들의 집합이다. 

"Hello" 

"aa"

"123" -> 숫자도 "" 쌍따옴표 안에 들어가면 문자열String이 된다. 

 

문자열의 종류 

1. " " 큰따옴표

2. ' ' 작은따옴표 

3. """ """ 큰따옴표 3개 연속

4. ''' ''' 작은따옴표 3개 연속 

 

 

문자열의 종류가 많은 이유 : 

'python's easy to use' 이렇게 하면 오류 

 

', " 를 문자열 안에 쓰고 싶다면 서로 다른 따옴표를 사용하거나 \ 백슬러쉬를 사용해서 표현하면 된다. 

 

 

"python's easy to use" -> ok 

'python\s easy to use' -> ok

 

 

 

 

문자열 띄어쓰기 = \n (백슬러쉬+n) = *이스케이프 코드사용 

 

 

 

 

 

 

여러줄 enter를 입력하고 싶을 때, \n 이 불편하다면 """ """ , ''' ''' 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* 이스케이프 코드란? 

*\ == 백슬러쉬

Escape codes 이스케이프 코드 
\n 문자열 안에서 줄 바꾸기
\t 문자열 사이에 탭 간격 주기 
\\ 문자 \(백슬러쉬)를 그대로 표현할 때
\' 작은따옴표 ' 를 그대로 표현할 때
\" 큰따옴표 "를 그대로 표현할 때 
\r 캐리지 리턴 (줄 바꿈 문자, 현재 커서를 가장 앞으로 이동)
\f 폼 피드 (줄 바꿈 문자, 현재 커서를 다음 줄로 이동)
\a 벨 소리 (출력할 때 PC스피커에서 '삑' 소리가 난다) 
\b 백스페이스
\000 NULL 문자 

 

 

문자열 연산하기 

문자열 더하기, 곱하기 

 

 

JavaScript에서는 문자열 * 숫자가 안되는데 Python는 가능하다! 

 

 

 

 

 

 

 

문자열 길이 구하기 

 

len( ) 함수 이용 

 

 

 

 

 

 

문자열 인덱싱

a라는 변수에 담긴 "Python is fun!"

a[0] = P를 가리킨다. a[0] == a[-0] 

string의 첫번째는 0 부터 시작, 

 

a[-1] = 가장 마지막 !를 의미 

a[-1] = 뒤에서 첫번째 문자 

a[-2] = 뒤에서 두번째 문자

a[1,2,3,4] 이렇게 한번에 return하진 않는다. 

 

 

 

 

문자열 슬라이싱 

[0:4] 의미 : a의 0번째 (L) 부터 4의 이전 (3=e) 까지 return = Life

여기서 4까지가 아닌 4의 이전 3까지를 뜻함

0<= x <4 

 

[ :4] == 0부터 3까지 (숫자는 : index - 해당 변수의 자리수를 의미) 

[4: ] == 4부터 끝까지 

[-1:] == 마지막 글자 

[ : ] == 처음부터 끝까지

[5:7] == 5부터 6까지 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문자열 안의 내용 변경하기

 

 

a[1]='y' 될 것 같지만 

이렇게 변경이 안된다. 

 

 

 

 

따로따로 분리해서 합치기

조금 복잡하지만 이렇게 가능하다.

 

 

 

 

 

 

문자열 포매팅 = 문자열 안에 어떤 값을 삽입하는 방법 

ex) 문자열 안의 특정한 값을 바꿔야 할 경우 

 

%d 를 넣고 string 끝에 %3 하면 그 자리에 3이 들어간다

%a 를 해도 된다. 그런데 w, b 이런 알파벳은 지원하지 않는다고 뜬다

 

 

 

이번에는 string을 넣어보기 

I eat %s apples 하고 %"six" 

 

숫자는 %d 를 썼는데 이번에는 %s 를 썼다. 

%d = 숫자 Number

%s = 문자열 String 

 

 

 

<- 이렇게 변수를 넣는 것도 가능하다. 

 

 

 

 

변수 2개 함께 넣기 by %(number, day) => 순서가 같아야 함. 

 

문자열 포맷 코드
%s 문자열(String)
%c 문자 1개(Character)
%d 정수(Integer)
%f 부동 소수 (Floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 '%' 자체) 

 

%s -> 문자열 포맷 코드는 어떤 형태의 값이든 변환해 넣을 수 있다. ↓↓

문자열 포맷 코드인 % 와 퍼센티지를 나타내는 % 가 문자열 안에 함께 존재한다면 퍼센티지를 나타내는 %를 %% 두번 반복해서 써주면 된다. (위 예제 맨 마지막 코드) 

 

 

 

포맷코드와 숫제 함께 사용하기

 

1. 정렬과 공백 

 

 

2. format 함수를 사용한 포매팅 대입 / 정렬 / 공백채우기 / 소수점 표현하기 / f 문자열 포매팅 

.format() 

a = "HEllo {0:<10} nice to see {1:<5}".format('there','you')
b = "Hello {0:^10} nice to see {1:^5}".format('there','you')
c = "Hello {0:>10} nice to see {1:>5}".format('there','you')

print(a)
print(b)
print(c)

d = "Hello {0:~<15}".format('there')
print(d)
e = "Hello {0:=^15}".format('here')
print(e)
f = "Hello {0:!>15}".format('somewhere')
print(f)

g = 3.12345667
a = "{0:<10.4f} haha".format(g)
print(a)

a="hello {{a}}".format()
print(a)


count=10
print(f"나는 사과 {count}개를 먹었다.")


d = {'name':'길동', 'age':30}
print(f"나의 이름은{d['name']}이고 나이는 {d['age']}입니다")

z = 'there'
print(f'{"hi":<10}')
print(f'{z:>10}')
print(f'{"hi":>10}')
print(f'{"hi":^10}')
print(f'{z:#<10}')
print(f'{z:@>10}')
print(f'{"ㅇㅇ":.^10}')

print("hello {'hi':~<10}")
print ("heeloo {0:~<10}".format('d'))

a = 1.2345667
print(f'{a:0.3f}')
print(f'{3.12345:0.2f}')
print(f'{a:>10.3f}')
print(f'{a:$^10.2f}')
print(f'{{d}}')

a='hobby'
print(a.count('o'))  #!
print(a.find('o'))    #1 
print(a.find('z'))   # -1
print(a.index('b'))   #2
#print(a.index('x')) #error

print(",".join('asdf'))
print('oo'.join('asdf'))
print('0'.join(['1','2','3','4']))
# print('0'.join([1,2,3])) error

#소문자를 대문자로 바꾸기 (upper)
a = 'hi'
print(a.upper())
print(a[0], a[1])

b="HI"
print(b.lower())

a=['a','b','c','d','g','d']
print(a)
print(a[0].upper())
print(a[-1].upper())
print('CCC'.lower())

a="STRING"
print(a.split('R'))
print(list(a))

a = "  right "
print(a)
print(a.lstrip(),'well')
print(a.rstrip())

print(list('bdsc'))
print(list('bdsc').sort())  #none ??

a="list is good"
print(a.replace('list','life'))
print(a.replace('l','R'))
print(a.replace('i','a'))

print(a.split()) #공백으로 나누기
print(a.split('s')) # s 로 나누기 
b = "a:b:c:dd" 
print(b.split(':'))

 

 

 

 

3. 리스트 자료형 (List = Array = Table) 

여러개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형 => List는 Python의 강점 ! 

C or JAVA의 Array / C++ STL vecto와 비슷 

List 안에는 빈 리스트, 숫자, 문자열, 배열 등 모두 혼합하여 포함할 수 있다.

ex) a= [1,2,"3", "안녕", ['a', 'b'] 

 

리스트의 인덱싱  == 문자열과 같다.

인덱싱 : 리스트의 특정한 원소에 접근하는 것을 Indexing이라고 함 

빈 리스트를 선언하는 방법  list()   or [] 

 

 

 

리스트 사칙연산

 

+ 더하기, * 곱하기가 가능하다. ( -, / , % 불가능) 

리스트 + 문자열도 불가 

 

문자열 + number는 불가능하다. (JS는 자동으로 number -> str로 변환해주는데 python은 안됨) 

대신 number를 str(number) 함수를 써서 문자열로 변환해서 더해줘야한다.

 

 

 

리스트 길이 구하기

len(a) 

 

List의 수정, 삭제del, 추가appen, 앞에 추가 insert, 정렬 sort, 뒤집기 reverse, 위치반환 index, 제거 remove, 꺼내기pop, 요소 개수세기 count , 리스트 확장 extend 예제 및 연습 

 

 마지막  A.extend([10,11,12]) == A += [10,11,12] 과 같다. 

+= 는 할당 연산자라고 부른다. 

 

 

리스트 컴프리헨션 (일반 함수있는 코드를 한줄로 바꿀 수 있다. ) 

-> 단순하게 원하는 배열을 만들 수 있다. 

- 리스트를 초기화하는 방법 중 하나

- 대괄호 안에 조건문, 반복문 적용하여 리스트 초기화 

- 2차원 리스트 초기화 할 때 효과적으로 사용

- nxm 크기의 2차원 리스트 한 번에 초기화 해야 할 때 유용 

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

 

 

 

 

 

Python에서 _ 언더바 쓰는 이유 : 반복을 수행하되 반복을 위한 변수가 필요 없을 때 

두번째, 세번째의 경우 _ , i 모두 print 실행하는 구문에 쓰이지 않음. 이럴 경우 그냥 _ 언더바 처리를 보통 한다고 함

 

 

리스트 remove는 해당 요소 1 개 첫번째만 제거 

리스트에서 특정 값 가지는 원소 모두 제거 방법은 ?

 

* 집합 자료형 {3,5} : 특정한 원소의 존재 유무를 체크할 때 효과적인 방법

 

 

 

 

 

 

4. 튜플 자료형

리스트와 유사하지만 한 번 선언된 값을 변경할 수 없다. ( String과 비슷) 

튜플은 () 을 사용 (리스트는 []) 

튜플은 리스트에 비해 상대적으로 공간 효율적 = 메모리 효율 좋다

 

 

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

# a[2]=10 error

 

 

튜플 언제 사용해야 좋은지?

 

- 서로 다른 성질의 데이터를 묶어서 관리할 때

ex)  최단 경로 알고리즘(비용, 노드번호) 의 형태로 튜플 자료형을 자주 사용

- 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때 

-> 튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용 가능

- 리스트보다 메모리를 효율적으로 사용해야 할 때 

 

a=()
print(a)
a = (1) # 요소 1일 때 반드시 , 붙이기
print(a)
a = (1,)
print(a)
a = (1,2,3)
print(a)
a = (1,2,3,)
print(a)
a = 1,2,3
print(a)
a = (1,2,(3,4),(4,5))
print(a)


 

튜플의 인덱싱 하기 / 슬라이싱하기 / 더하기 / 곱하기 / 길이구하기 리스트와 같다. 

 

 

 

 

 

 

 

공부 내용 출처 : Do it! 점프 투 파이썬 책 + 동빈나님 '이코테2021강의' on Youtube

반응형

댓글