파이썬의 리스트에 대해 공부하던 중 궁금증이 생겼다.
코드를 먼저 살펴보자.
a = [1, 2, 3]
b = [2, 4, 6]
print(a * 3)
#[1, 2, 3, 1, 2, 3, 1, 2, 3]
파이썬의 리스트에 곱하기를 하면 곱한 수 만큼 해당 리스트가 반복 된다.
a = [1, 2, 3]
b = [2, 3, 4]
print(a * b)
#TypeError: can't multiply sequence by non-int of type 'list'
하지만 리스트끼리 곱하기를 할경우 TypeError가 발생한다.
a = [1, 2, 3]
b = [2, 3, 4]
print(a * a)
#TypeError: can't multiply sequence by non-int of type 'list'
그럼 a리스트에 a리스트를 곱하면 a가 두번 반복될 것이라 생각하겠지만 이역시 TypeError가 발생한다.
어떻게 하면 곱하기를 할 수 있을까 하고 여러가지를 시도해 보았다.
a = [1, 2, 3]
b = [2, 3, 4]
print(str(a[0]) + str(a[1]) + str(a[2]))
#123
파이썬의 내장함수 str은 인자로 받는 정수나 실수를 문자열로 바꿔주는 함수이다. 이를 이용해 리스트를 인덱싱 해서 더해주면 문자열끼리의 덧셈이므로 6이 아닌 "123"이 출력된다.
이 str함수를 이용해, 문자열끼리는 곱셈이 되지 않을까 하고 시도 해 보았다.
a = [1, 2, 3]
b = [2, 3, 4]
print(str(a[0]) * str(a[1]) * str(a[2]))
#TypeError: can't multiply sequence by non-int of type 'str'
하지만 이 역시 문자열끼리는 곱셈이 안된다는 에러가 발생한다.
마지막으로 정수형으로 바꿔서 연산을 해 보았다.
a = [1, 2, 3]
b = [2, 3, 4]
c = "12"
d = "123"
print(int(c) * int(d))
print(int(a) * int(a) * int(b))
#1476
#TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'
문자열을 int형으로 변환 후 곱셈은 되지만, 리스트는 에러가 발생한다.
a = [1, 2, 3]
b = [2, 3, 4]
print(int(a[0]) * int(b[2]))
#4
인덱싱으로 리스트의 인자를 뽑아내서 정수형으로 형 변환 후 곱셈은 가능하다.
a = [2, 4, 5]
a[1] = 5
print(a)
#[1, 5, 5]
파이썬은 직관적인 언어라 눈에 보이는 것처럼 해석이 되는 것 같다.
a의 1번째 자리에 5를 넣으면 4가 5로 바뀐다.
a = [2, 4, 5]
a[0:2] = []
print(a)
#[5]
a를 0번째부터 2번째 바로 앞자리까지 슬라이싱한 후 빈 리스트를 대입하면, a의 0번째부터 1번째까지 빈값으로 바뀐다. 그후 a를 출력하면 [5]가 나온다.
a = [2, 4, 5]
del a[1]
print(a)
#[2, 5]
del함수를 사용하면 리스트의 요소를 삭제할 수 있다.
a = [2, 4, 5]
del a[1:]
print(a)
#[2]
슬라이싱을 이용해 한번에 여러 요소 삭제도 가능하다.