학교에서 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

+ Recent posts