이번에는 파이썬 데이터 타입중 정말 중요한 '리스트' 형에 대해서 배워보겠다.
데이터를 긁어오면서 리스트형을 많이 다룰텐데, 그 때 사용하는 함수들을 익혀야 한다.
자료형 배울 때 리스트에 대한 기본적인 것은 다 했기 때문에
이번 노트정리에서는 크롤링, 웹데이터 수집과 관련된 리스트에 대한 내용들을 담아보겠다.
colors = ["red","blue","green"]
colors[0] , colors[1], colors[2]
먼저 colors 라는 변수에 리스트를 넣어준다.
이번에 볼 것은 깊은 복사와 얕은 복사이다.
#얕은복사
b = colors
b
이렇게 하게 되면 b를 변경하면 colors (원본) 까지 변경이 돼서 원본을 그대로 유지하고 싶다면
깊은복사를 진행해주어야 한다.
b[1] = "black"
b
colors
결과)
['red', 'black', 'green']
['red', 'black', 'green']
이렇게 colors[1] 의 값도 black 으로 변경되어 있다.
#깊은복사
c = colors.copy()
c
copy() 라는 함수를 통해 c 에 복사를 해주었다.
c[1] = 'yellow'
c
colors
결과)
['red', 'yellow', 'green']
['red', 'black', 'green']
이렇게 colors 의 원본은 그대로 유지하고 c 의값만 변경된 것을 확인 할 수 있다.
데이터를 다루는 우리에게는 이러한 지식들을 필수적으로 알고 있어야 일이 엉망이 되는 일을..
줄일 수 있을 것 이다. 그리고 나의 목숨도...조금 길어지겠지...!?
이제 리스트의 기능들을 확장해서 하나씩 배워보도록 (외워그냥) 하겠다.
: list 제일 뒤에 값을 추가
movies 라는 리스트를 하나 생성하였다.
movies = ['라라랜드','먼 훗날 우리','어벤져스','다크나이트']
movies
movies.append("타이타닉")
movies
결과)
['라라랜드', '먼 훗날 우리', '어벤져스', '다크나이트', '타이타닉']
: 제일 뒤에 자료를 하나씩 삭제
movies.pop() # 이 안에는 삭제된 데이터가 들어간다.
movies
['라라랜드', '먼 훗날 우리', '어벤져스', '다크나이트']
위에 '타이타닉' 데이터가 사라진 것을 확인 할 수 있다.
: 제일 뒤에 자료추가
movies.extend(['위대한쇼맨','인셉션','인터스텔라'])
movies
결과)
['라라랜드', '먼 훗날 우리', '어벤져스', '다크나이트', '위대한쇼맨', '인셉션', '인터스텔라']
: 원하는 자료를 삭제
movies.remove('어벤져스')
movies
결과)
['라라랜드', '먼 훗날 우리', '다크나이트', '위대한쇼맨', '인셉션', '인터스텔라']
: [n:m:t] n부터 m-1까지 t간격으로
movies[3:5]
결과)
['위대한쇼맨', '인셉션']
: 원하는 위치에 자료를 삽입
favorite_movies = movies[3:5]
favorite_movies
favorite_movies.insert(1, 9.60) #인덱스 , 넣을 데이터 값
favorite_movies
결과)
['위대한쇼맨', 9.6, '인셉션']
하나를 더 해보자.
favorite_movies.insert(3, 9.50)
favorite_movies
결과)
['위대한쇼맨', 9.6, '인셉션', 9.5]
favorite_movies.insert(5, ['레오나르도 디카프리오','김소희'])
favorite_movies
결과)
['위대한쇼맨', 9.6, '인셉션', 9.5, ['레오나르도 디카프리오', '김소희']]
와우....!
: 자료형 True/False boolean 타입으로 반환
print(isinstance(favorite_movies, list))
print(isinstance(favorite_movies, int))
print(isinstance(favorite_movies, str))
print(isinstance(favorite_movies, tuple))
결과)
True
False
False
False
그렇다면 이중 for문을 돌려서 isinstance를 활용해 보자.
for each_item in favorite_movies:
if isinstance(each_item, list):
for nested_item in each_item:
print("nested_item: " ,nested_item)
else:
print('each_item: ' , each_item)
결과)
each_item: 위대한쇼맨
each_item: 9.6
each_item: 인셉션
each_item: 9.5
nested_item: 레오나르도 디카프리오
nested_item: 김소희
이렇게 리스트로 insert 를 했던 레오나르도 디카프리오와 김소희는 nested_item 으로
출력이 되었고, 나머지는 string 형태이기 떄문에 each_item 으로 출력이 되었다.
list 다루는 것에 겁이 많았었는데 이렇게 하나씩 예제를 가지고서 기능을 다루어 보니까
조금 감이 잡히고, 자신감이 붙었다. 그런데... 진짜 json 다룰 때는 고통스럽다.
딕셔너리와 리스트가 함께 엉겨져 있으면, 그것들을 어떻게 다루어야 할지 너무 헷갈린다 ㅠ
특히 딕셔너리와 리스트마다 기능의 차이가 있는데 그게 너무 헷갈린다.
아무튼 계속 사용하다보면 좋아질거다..!
꾸준히 연습해보자.