본문 바로가기

TIl

01.16 Collection, 형변환, 연산자

List 리스트

여러 개의 값을 순서대로 저장하는 변경 가능한 시퀀스 자료형 == 가변의 데이터

대괄호 [ ] 로 표기

0개 이상의 객체를 포함하며, 데이터 목록을 저장

데이터는 어떤 자료형도 저장할 수 있음

my_list_1 = []
my_list_2 = [1, 'a', 3, 'b', 5]
my_lst = [1,2,'Python',['hello','world']]

중첩된 리스트 접근

my_list = [1, 2, 3, 'Python', ['hello', 'world', '!!!']]

print(len(my_list))  #5
print(my_list[4][-1])  # !!!
print(my_list[-1][1][0]) #w

리스트는 가변 ↔ 문자열

my_list = [1,2,3]
my_list[0] = 100
print(my_list) #[100,2,3]

turple 튜플

여러 개의 값을 순서대로 저장하는 변경 불가능한 시퀀스 자료형

  • 0개 이상의 객체를 포함하며 데이터 목록을 저장
  • 소괄호 ( )로 표기
  • 데이터는 어떤 자료형도 저장할 수 있음
my_turple_1 = ()

my_turple_2 = (1,) : , 가 없으면 정수로 인식해버리기 때문에 '반드시' 들어가야 함

시퀀스 특징은 다른 타입들과공유함

mytuple = (1,'a',3,'b',5)

my_tuple[1] = 'z'# TypeError 등장
튜플은 어디에 쓰일까?

튜플의 불변 특성을 사용한 안전하게 여러개의 값을 전달, 그룹화, 다중 할당 등

개발자가 직접 사용하기 보다 ‘ 파이썬 내부 동작’에서 주로 사용됨

x, y = (10, 20)

print(x)  # 10
print(y)  # 20

# 파이썬은 쉼표를 튜플 생성자로 사용하니 괄호는 생략 가능
x, y = 10, 20

range

연속된 정수 시퀀스를 생성하는 변경 불가능한 자료형

range 표현

시퀀스 자료형이라고 부르기도 함

range(n) : 0부터 n-1 까지의 숫자의 시퀀스, 슬라이싱같이 작동함

range(n,m) : n부터 m-1까지의 숫자 시퀀스

중요

my_range_2 = range(1,10) #
print(my_range_2) # range(1,10) 출력 

# => 리스트로 형 변환 시 데이터 확인 가능
print(list(my_range_2)) #[1,2,3,4,5,6,7,8,9]



Non-sequence Types 논 시퀀스

dict 딕셔너리

key - value 쌍으로 이루어진

순서도 없고중복도 없는변경 가능한 자료형

  • key는 변경 불가능한 자료형만 사용(str,int,float,tuple,range 등) ⇒ key는 변경 불 가능 하다.
  • value는 모든 자료형 사용 가능
  • 중괄호 { } 로 표기
my_dict_1 = {} = dict()
my_dict_2 = {'key': 'value'}
my_dict_3 = {'apple': 12, 'list': [1, 2, 3]}

print(my_dict_1)  # {}
print(my_dict_2)  # {'key': 'value'}
print(my_dict_3)  # {'apple': 12, 'list': [1, 2, 3]}

# 값 변경
my_dict['apple'] = 100
print(my_dict_3)  # {'apple': 100, 'list': [1, 2, 3]}

순서가 없다 = 인덱스로 접근할 수 없다 ⇒ 반드시 ‘key’로 ‘value’에 접근해야 된다.

my_dict = {   'apple' : 12,   'list' : [1,2,3],   'apple' : 100,
}

print(my_dict) # {'apple': 100, 'list': [1, 2, 3]}

중복이 없다 = 마지막 값으로 덮어쓰기 된다.

set 집합자료형

순서도 없고 중복도 없는 변경 가능한 자료형

순서가 없다 = 인덱스로 접근할 수 없다

수학에서의 집합과 동일한 연산 처리 가능

중괄호 { } 로 표기 = dict와 형식으로 구분함

my_set_1 = set() #set() 라는 내장함수로 빈 세트를 표현함,         # dict과 구분을 위함
my_set_2 = {1, 2, 3}
my_set_3 = {1, 1, 1}

print(my_set_1)  # set()
print(my_set_2)  # {1, 2, 3}
print(my_set_3)  # {1}

세트의 집합 연상

my_set_1 = {1,2,3}
my_set_2 = {3,6,9}

# 합집합 ( | )
print(my_set_1 | my_set_2)  # {1, 2, 3, 6, 9}
# 차집합 ( - ) # {1, 2}
# 교집합 ( & ) # {3}

Other Types 기타

None

파이썬에서 ‘값이 없음’을 표현하는 자료형

Boolean

True, False 을 표현하는 자료형

  • 비교/논리 연산의 평가 결과로 사용됨
  • 주로 조건/ 반복문과 함께 사용

Collection

시퀀스와 비시퀀스의 공통점 : 여러개의 값을 저장하는 것

⇒ Collection

여러 개의 항목 또는 요소를 담는 자료구조

순서 여부에 따라 시퀀스와 비시퀀스가 나뉜다

Type Conversion 형변환(타입변환)

암시적 형변환 (자동) ↔ 명시적 형변환(수동)

암시적 형변환

Boolean, Numeric Type에서만 가능

print(3 + 5.0) # 8.0  정수(int) + 실수(float) ⇒ 실수(float)
print(True + 3) # 4 True를 1로 1+3

print(True + False) # 1 # 1+0 = 1

명시적 형변환

str → integer : 형식에 맞는 숫자만 가능

integer → str : 모두 가능

print(int('1')) #1 , 숫자형식에 맞는 문자열이었기 때문에 가능
print(str(1) + '등') #1등, ''만 붙이면 되서 편리함

print(float('3,5')) # 3.5 
print(int(3.5)) # 3 , 0.5를 버림으로서 바꿀 수 있음
print(int('3.5')) #Value Error
#### 컬렉션 간 형변환 정리
|          |   str    |       list       |     tuple      |   range    |      set       |   dict    |
|:------------:  |:----------:  |:----------------------:  |:--------------------:  |:------------:  |:--------------------:  |:-----------:  |
|    str     |        |      O      |       O        |     X      |       O        |     X     |
|    list    |    O     |              |       O        |     X      |       O        |     X     |
|   tuple    |    O     |      O      |              |     X      |       O        |     X     |
|   range    |    O     |      O      |       O        |          |       O        |     X     |
|    set     |    O     |      O      |       O        |     X      |              |     X     |
|    dict    |    O     |   O     (key만)    |   O   (key만)    |     X      |   O   (key만)    |         |


연산자

피 연산자(= 값) ↔ 연산자(값을 처리하는 것)

산술 연산자

-,+,*,/,//,% 등등

복합 연산자

연산과 할당을 함께 이뤄짐

+=, -=, *= 등등

비교 연산자

<, ≤ , ≠, : 대체로 True/ False 값을 출력하게 된다.

is, is not : 메모리 주소를 비교함(int와 float를 구분하는 것)

  • ==는 동등성(equality), is는 식별성(identity)

    값을 비교하는 ==와 다름

  • ==은 값(데이터)을 비교하는 것이지만, is는 레퍼런스(주소)를 비교하기 때문
  • is 연산자는 되도록이면 None, True, False 등을 비교할 때 사용

    print(2.0 is 2)False

논리 연산자

and(논리곱), or(논리합), not(논리부정)

not True => False
not 0 => True 암시적 형변환이 이루어 짐

비교 연산자와 함께 사용 가능

단축 평가

논리 연산에서 두 번째 피연산자를 평가하지 않고 결과를 결정하는 동작

코드 실행을 최적화하고, 불필요한 연산을 피할 수 있도록 함

⇒ 전자가 False인데 and면 바로 False

전자가 True인데 or면 바로 True

예시 문제

vowels = 'aeiou'

print(('a' and 'b') in vowels) # False
print(('b' and 'a') in vowels) # True

print(3 and 5) # 5
print(3 and 0) # 0
print(0 and 3) # 0
print(0 and 0) # 0

print(5 or 3) # 5
print(3 or 0) # 3
print(0 or 3) # 3
print(0 or 0) # 0
  • and
    • 첫 번째 피연산자가 False인 경우, 전체 표현식은 False로 결정.

      두 번째 피연산자는 평가되지 않고 그 값이 무시

    • 첫 번째 피연산자가 True인 경우, 전체 표현식의 결과는 두 번째 피연산자에 의해 결정.

      두 번째 피연산자가 평가되고 그 결과가 전체 표현식의 결과로 반환

  • or
    • 첫 번째 피연산자가 True인 경우, 전체 표현식은 True로 결정.

      두 번째 피연산자는 평가되지 않고 그 값이 무시

    • 첫 번째 피연산자가 False인 경우, 전체 표현식의 결과는 두 번째 피연산자에 의해 결정.

      두 번째 피연산자가 평가되고 그 결과가 전체 표현식의 결과로 반환

멤버십 연산자

특정 값이 시퀀스나 다른 컬렉션에 속하는지 여부를 확인

  • in : 왼쪽 피연산자가 오른쪽 피연산자의 시퀀스에 속하는 지를 확인
  • not in : 왼쪽 피연산자가 오른쪽 피연산자의 시퀀스에 속하지 않는지를 확인

시퀀스형 연산자

+* 는 시퀀스 간 연산에서 산술 연산자일때와 다른 역할을 가짐

+: 결합 연산자

print('Gildong' + ' Hong') #Gildong Hong
print([1,2] +['a','b']) #[1,2,'a','b']

*: 반복 연산자

print('h1' *5)
print([1,2] * 2) # [1,2,1,2]

연산자 우선순위

추가로 배운 것

  1. list 의 인덱스의 갯수를 한정시킬때

    arr = [0] * 100 을 할 경우 0~99개의 100개의 인덱스로 한정해둘 수 있음

    .append를 쓰게 되면 한칸씩 늘리면서 인덱스의 값을 추가한다.

  2. print 하기
    a = 'fdfadsaf'
    print('fdafads \n dafdafa \n dfadasfsaf')
    또는
    print(a,'\n',a,'\n',a)
    
    ( X ) print(a a a)

'TIl' 카테고리의 다른 글

모듈, 제어문  (0) 2024.01.18
함수, 재귀 함수, Packing  (0) 2024.01.17
0115 파이썬 1  (1) 2024.01.15
1월 14(토)  (0) 2024.01.13
파이썬 1일차(스캠)  (0) 2024.01.13