학교에서 Python 실습보조원을 하면서 많은 질문을 받았는데,
append 대신 extend를 사용했는데 작동이 제대로 안돼요! 라는 질문을 받았다.
나는 extend를 모르기에 바로 구글에 검색을 해보았다.
검색한 결과는 이 친구도 append처럼 리스트에 값을 삽입할 수 있지만
결론적으로 말하면 extend는 리스트에 원소를 삽입할 수 있다는 면에서는 append와 같지만, 전혀 다른 기능을 하는 함수였다.
extend는 오히려 Javascript의 spread operater 같은 느낌?... 요즘 자바스크립트만 계속 공부해서 그런지 보고 나서 이 생각이 들었다.
a = "hello"
append_list = []
expend_list = []
append_list.append(a)
extend_list.extend(a)
print(append_list)
print(extend_list)
만약 이렇게 한다면 결과는 어떻게 될까?
['hello']
['h', 'e', 'l', 'l', 'o']
이렇게 된다. JavaScript를 안다면 알겠지만, spread operater 같은 결과를 나타낸다.
설명하자면 잘기잘기 찢어서 그 원소들을 넣어주는 것이다!
"hello"같은 문자열 같은 경우는 한 글자씩 쪼개서 넣어주는 것이다!
그래서 int는 extend가 되지 않는다.
그렇다면 list를 넣어준다면?
a = ["hello"]
append_list = []
expend_list = []
append_list.append(a)
extend_list.extend(a)
print(append_list)
print(extend_list)
정말 재밌는 결과가 나온다.
[['hello']]
['hello']
이런 결과가 나온다.
처음 보는 사람은 헷갈릴 수 있겠다. 아마 이런 부분 때문에 질문을 한 것이 아닐까.
그러니까 append는 ["hello"] 라는 리스트 자체를 리스트에 넣은 것이다.
리스트 안에 리스트를 넣어준 것이다.
따라서 결과물은 이런 [['hello']]라는 2차원 배열이 된거다.
하지만 extend는 갈기갈기 찢은 거다.
a라는 리스트를 갈기갈기 찢어서 리스트의 원소인 "hello"만 꺼낸 뒤
extend에 넣어주었기 때문에, ['hello'] 이렇게 된 것이다.
그러니까 이해를 쉽게 하기 위해 비교하자면
for i in a:
extend_list.append(i)
이거와
extend_list.extend(a)
이 두 코드는 동일하다.!
'Coding > Python' 카테고리의 다른 글
파이썬 반올림 round() 흔히 하는 실수! 사사오입 원칙 (0) | 2020.06.12 |
---|---|
Python 입력 받기 (0) | 2020.05.16 |