본문 바로가기
  • 데이터야 놀자
데이터 분석 환경

파이썬 Python 리스트, 튜플, 딕셔너리 ( List, Tuple, Dictionary )

by 데이터랑 2023. 3. 26.
728x90

 

파이썬으로 데이터를 다루다 보면 리스트, 튜플, 딕셔너리를 사용하는 경우가 참 많습니다.

이 모두가 하나의 변수에 여러 값을 할당하는 자료형으로 배열의 형태를 가지고 있는데

각각 사용법이나 형태가 차이가 있고 상호 간 데이터 변환하여 사용해야 하는 경우도 많고 해서

간단하게 정리해 두려고 합니다.

 

 

리스트, 튜플, 딕셔너리 ( List, Tuple, Dictionary ) 차이점 비교

 

 

리스트 list 튜플 tuple 딕셔너리
변수 하나에 다수개의 값을 저장
변경 가능한 연속형 변수 (mutable)
리스트 추가, 변경, 삭제 가능
값들이 서로 다른 자료형도 가능
변경 불가능 (immutable) 변수
속도 빠름
사전처럼 키와 값을 쌍으로 저장 
값에는 모든 자료형 사용 가능 -
인덱스로는 접근 불가하고 키로 접근
dict() 로 리스트, 튜플은 사용가능
 [ ]로 묶고 콤마로 구분된 값을 나열 ( ) 로 묶고 콤마로 구분된 값을 나열 { } 를 사용 
리스트 = [값, 값, 값]
리스트 = list()   또는 []
리스트 = list(range(시작, 끝, 증가 폭)) 


튜플 = (값, 값, 값)
튜플 = 값, 값, 값
튜플 = (값, ) # 요소가 하나인 튜플
튜플 = 값, # 요소가 하나인 튜플
튜플 = tuple(range(시작, 끝, 증가 폭))


딕셔너리 = {키1: 값1, 키2: 값2, ........}
딕셔너리 = {} 또는 x = dict()
딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
딕셔너리 = dict([(키1, 값1), (키2, 값2)]) 딕셔너리 = dict({키1: 값1, 키2: 값2})
split(‘구분자’)
: 구분자 기준 문자열 분리후 리스트반환 ‘연결자’.join()
: 리스트들을 연결자로 연결하여 생성
sort() : 리스트 정렬 결과 반환 - 리스트형 만 가능
sorted() : 리스트 복사하여 정렬후 결과반환 - 리스트,딕셔너리,문자열,튜플도 가능
append() : 리스트 뒤에 그대로 추가
extend() : 반복자료형 내부의 각 원소 추가
replace(old, new) : 특정문자 변환
format() ;
튜플[0:2] 같이 슬라이싱으로 데이터 접근  값 조회 : 딕셔너리[키] -인덱스로불가
값 추가 : 딕셔너리[키] = 값
값 삭제 : del 딕셔너리[키]
개수 확인 : len(딕셔너리)
키값 조회 : 딕셔너리.keys()
값들조회 : 딕셔너리.values()
unpacking
>>> x = [1, 2, 3]
>>> a, b, c = x
>>> print(a, b, c) 1 2 3
unpacking
>>> x = (1, 2, 3)
>>> a, b, c = x
>>> print(a, b, c) 1 2 3
 
리스트 = list(튜플)
리스트 = list(딕셔너리.keys())
리스트 = list(zip(딕셔너리.keys(),
                          딕셔너리.values()))
튜플 = tuple(리스트)
튜플 = 딕셔너리.items()
딕셔너리 = dict(zip(리스트1, 리스트2))
##리스트1은 키값으로 2는 value로

tuple_list = [('A',1), ('B',2), ('C',3)]
dictionary = dict(tuple_list)
print(dictionary)

 ==> {'A': 1, 'B': 2, 'C': 3}

 

## 사용예제1 : 

for code_sector in code_list:    ## 리스트 대신 튜플로 하는경우 속도 더 빠름


## 사용예제2 : 

for key in 딕셔너리:
    if type(딕셔너리[key]) is dict:   # 딕셔너리 타입인지
        for k in 딕셔너리[key]:
            print('{} : {}'.format(k, 딕셔너리[key][k]))
    elif type(딕셔너리[key]) is list: # 리스트타입인지
        for item in 딕셔너리[key]:
            print('{} : {}'.format(key, item))
    else: # 이름, 레벨
        print('{} : {}'.format(key, character[key]))

 

 

리스트 튜플을 데이터프레임으로 변환

 

 

data = [(튜플1,2,3,4 ), (튜플2,3,4,5)......]

df = pd.DataFrame(data, columns=['col1', 'col2', 'col3', 'col4'])

 

 

리스트를 시리즈와 데이터프레임으로  변환

 

시리즈 Series로 변환 데이터프레임으로 변환(list to DataFrame)
import pandas as pd
a = [10, 30, 20, 40]
pd.Series(a)

# 결과
0 10
1 30
2 20
3 40  
a = [10, 30, 20, 40]
b = ['a', 'g', 'h', 'c']

# 각 리스트를 행으로 취급
pd.DataFrame([a, b])

# 결과
    0   1   2   3
0 10 30 20 40
1  a    g   h   c
import pandas as pd
a = [10, 30, 20, 40]
id = ['aaa', 'bbb', 'ccc', 'ddd']

# 인덱스를 id로 지정하고 싶은 경우
pd.Series(a, index = pd.Index(id))
# 결과
aaa 10
bbb 30
ccc 20
ddd 40 
a = [10, 20, 30, 40]
b = ['a', 'g', 'h', 'c']

# 각 리스트를 열로 취급
pd.DataFrame( zip(a, b) )

# 결과
    0    1    
0  10   a
1  30   g
2  20   h
3  40    c
-------------------------------------------
# 인덱스와 열명을 지정하고자 할때

pd.DataFrame(zip(a, b),
      index = pd.Index(['aa', 'bb', 'cc', 'dd']),
      columns = ['col1', 'col2'])

# 결과
       col1   col2
aa  10      a
bb  20      g
cc  30       h
dd  40       c


 

 

 

딕셔너리를 시리즈와 데이터프레임으로  변환

 

시리즈 Series로 변환 데이터프레임으로 변환(list to DataFrame)
b = {'aaa' : 10, 'bbb' : 20, 'ccc' : 30}

pd.Series(b)

# 결과
aaa 10
bbb 20
ccc 30
a = {'col1' : [123, 456, 789], 'col2' : ['aaa', 'bbb', 'ccc']}

pd.DataFrame(a)

# 결과
   col1   col2
0 123    aaa
1 456    bbb
2 789   ccc

## 딕셔너리의 각 key를 column 이름으로, value를 column의 원소들로 가지는 데이터프레임을 만들때 ###

 

 

 

리스트와 Numpy의 array 차이점 비교

 

구분 list numpy  array
자료형
a = [1, 3, 5, 'a', 'b']

# #=> 1, 3, 5는 숫자형, 'a', 'b'는 문자열

import numpy as np

b = np.array([1, 3, 5, 'a', 'b'])
##=> '1', '3', '5', 'a', 'b'의 문자열로 전환
데이터 수 a = [[1], [3, 5], [2, 4, 6]]
# 정상처리됨 
b = np.array([[1], [3, 5], [2, 4, 6]])
# 개수가 달라서 array 선언 불가능
연산의미 a = [1, 3, 5]
b = [2, 4, 6]
a + b    # 결과 : [1, 3, 5, 2, 4, 6]
# 허용하지 않음 : a - b, a * b, a / b

a * 3  # 결과  : [1, 3, 5, 1, 3, 5, 1, 3, 5]
----------------------------------------------------
### 연산을 하려면
add_list = [ a[i] + b[i]  for i in range(len(a)) ]

print(add_list)   #   결과 : [3, 7, 11]

a = np.array([1, 3, 5])
b = np.array([2, 4, 6])
a + b # array([ 3, 7, 11])
a * b # array([ 2, 12, 30])
a + 2 # array([3, 5, 7])
a * 3 # array([ 3, 9, 15])
메소드 a.append(7)
a.extend([9])
a.remove(9)
b.mean()
b.argmax()
b.round()
연산속도 - 약 10배 정도 빠름 (연산종류따라 차이있음)

 

매트릭스 데이터 슬라이싱
참고 : 매트릭스 데이터 슬라이싱

 


 

 

 

 

728x90
728x90

댓글