맞춤형 플랫폼 개발 도전기 (웹개발, 딥러닝, 블록체인)

Python Basic 2 (Datatype : List, Tuple, Set, Dict) 본문

코딩

Python Basic 2 (Datatype : List, Tuple, Set, Dict)

경이가 꿈꾸는 플랫폼 개발 2021. 11. 2. 21:56

DataType을 분류하면 이 정도로 나눌 수 있겠다.

 

list        →  순서 있음,  중복 허용,  mutable
tuple     →  순서 있음,  중복 허용,  immutable
set        →  순서 없음,  중복 허용 안함
dict       →  key, value 쌍으로 구성, 순서 없다.

 

 

 

List

리스트의 원소는 기본적으로 '어떤 타입이든'가능하다. 한 리스트 안에 int, str, float.. 등 모두 넣을 수 있다.

 

1. slicing

가장 잊기 쉬운 게 [end : start : -1] → 반대로 출력, [start : end : step] → end 직전까지만 slicing 이고

나머진 쉽다. slicing 부분은 Numpy에서 다차원 배열 slicing하는게 조금 헷갈린다.

 

Python Numpy Basic 1 (Array, Random)

Python에서는 대부분 함수 적용했을 때 원본이 변화되면 return 값이 없는데, 원본이 변화되지 않으면 return 값이 있음 (은근히 유욯하게 쓰인다 :) 잘 기억해 놓으면 활용도 多) Array 1. np.arange(iterable)

katieyoon-the-developer.tistory.com

slicing 이용해서 데이터를 중간에 삽입한다.

data[index] = 값 형태로 데이터 삽입하면 된다.

복수개의 원소를 삽입할 때는 data[ start : end ] = [ 원소1, 원소2, ... , 원소end-1 ] 형태로 삽입한다.

 

 

2. append(), extend(iterable)

append() : list.append(원소) 형태로 사용

extend(iterable) : list.append(iterable) 형태로 사용

extend : iterable이 들어오면 하나하나 다 찢어서 저장 (str이면 char단위로, list는 원소단위로)

 

3. del()

del(원소) 로 사용

변수도 삭제할 때 del(변수)사용

 

4. 다차원 List

list의 원소가 list라고 생각하면 된다.

indexing은 data[i][j][k] → data[i][j] 로 만드는 것인데, indexing을 한다는 것은 차원을 축소시키는 것이라 생각하면 쉽다. slicing 각 차원에 대해서 적용 가능하다

data = [
    [1, 2, 3, 4, 5],
    [10, 20, 30, 40, 50],
    [11, 22, 33, 44, 55]
]

data[0][:3]
data[::2]

# [1, 2, 3]
# [[1, 2, 3, 4, 5], [11, 22, 33, 44, 55]]

 

6. index(value)

값의 index값을 찾는 것

 

7. remove(value)

값으로 list의 원소를 삭제한다. 

처음으로 찾은 값만 삭제하고, 없는 값을 삭제하려고 하면 error 발생한다.

 

8. pop(생략 가능 value)

리스트의 맨 뒤의 원소가 리턴되고, 리스트에서 원소가 제거됨

※ 보통 return 값이 없으면 원본이 변화, return 값이 있으면 원본 변화 없음 (항상은 아니다)

 

9. sort(), sorted()

sort()는 기본적으로 오름차순 정렬시켜 주는 것으로, 원본이 변경된다.

옵션으로 reverse=True를 넣으면 내림차순으로 정렬된다.

sorted()는 원본을 변화시켜주지 않는다.

 

10. reverse()

reverse()는 반대로 뒤집는 것으로, 원본 변화된다.

 

11. in

값 in list(iterable) 형태로 사용한다.

리턴값은 True, False 둘 중 하나로, boolean 값이 리턴된다.

 

12. str과 변환 (str ↔ list)

list에서 하던 것처럼 indexing과 slicing 가능하다.

하지만, str은 immutable하기 때문에 중간에 값을 바꿀 수는 없다.

str도 sort할 수 있다.

다만, sorted(str) 형태로 쓰면 str 안의 모든 원소를 다 찢어서 sorting 해준다. (.sort() 이런 식으로 사용하지 않는다.)

당연히 원본 변화 없다.

myStr = 'Python'
sorted(myStr, reverse=True)

# ['P', 'h', 'n', 'o', 't', 'y']

 

Tuple

사실 모든 Python은 기본적으로 모든 게 Tuple 타입이다. 

Tuple은 보통 ( ) 괄호 안에 comma 로 연결해서 만드는데 ( ) 괄호를 쓰지 않으면 자동으로 Tuple로 생성된다. (단, 2개 이상의 데이터 일때만 그렇다. 하나의 데이터를 Tuple로 저장하려면 끝에 , comma를 붙여줘야 한다)

Tuple은 immutable해서 원소를 변경할 수 없다. list처럼 변경이 안 된다는 것 (당연히 메소드도 없다.)

 

 

Set

만드는 방법은 { } 로 만들거나 set()로 만들 수 있다.

중복된 데이터를 지우는 함수처럼 생각해도 괜찮다.

list(set( data )) 하면 중복 지운 상태로 list로 만들 수 있다.

 

1. add()

2. remove()

둘 다 값을 지운다. (index 아님)

 

 

Dict

정말 자주 쓰는 데이터타입

dictionary 데이터 타입은  key-value 쌍으로 저장되는 데이터 집합이다

{Key1:Value1, Key2:Value2, Key3:Value3 ...} 형태로 작성되며 순서는 고정되지 않고, key는 중복 불가하다.

 

1. get( key값, key값이 없을 경우 무엇을 리턴할지 )

dict.get( key값, key값이 없을 경우 무엇을 리턴할지 ) 로 생성한다.

 

2. dict['키값'] = 값

수정, 추가 모두 똑같은 방식으로 한다. 키값이 존재하지 않으면 자연스럽게 새로 추가한다.

 

3. del( dict['키값'] )

삭제할 때는 이런 식으로 삭제한다. 삭제할 키값이 없으면 error다.

 

4. dict.keys(), dict.values()

keys 같은 경우에는 중복 안되니까 set( dict.keys() ) 로 만드는 것이 효율적이다.

 

5. dict.items()

[ i+j for i, j in dict_sample.items()] 이런 식으로 items() 이용해 key, value 나눠서 뽑아내는 형태 많이 사용한다.

 

5. in

in 연산자는 보통 key가 존재하는지 확인하는 용도로 사용

check_list = [3,4,5,6]

for i in sample_dict:
    print(i in check_list)

 

 

Comments