#6. 파이썬 기본 6 - 리스트와 튜플
- PIA team
- 2022년 2월 22일
- 6분 분량

#6-1. 리스트(list) 란?
앞에서 list에 대한 내용을 잠시 다뤘었는데요, python에서 list는 말 그대로 여러가지 요소값을 [ ] 를 이용하여 하나의 모음, 목록으로 만들어 주는 것입니다.
>>> list_a = [1, 2, 3, 4, 5]
>>> list_b = []
>>> list_c = ['python','is','best',2022]
>>> list_d = ['python','is',[2022,'trend']]
위와 같이 list는 , 를 통해 요소를 구분하며 숫자만 요소값으로 가질 수도, 문자열만 요소값으로 가질 수도, 숫자와 문자열을 요소값으로 가질 수도, 심지어 리스트 자체도 요소값으로 가질 수도 있습니다. 추가적으로, 아무 요소값도 갖고 있지 않은 빈 리스트도 생성할 수 있습니다.
즉, 리스트에는 어떤 자료형이든 포함시킬 수 있습니다.
참고로 추가 정보를 드리자면, 빈 리스트의 경우
>>> list_a = []
>>> list_b = list()
이렇게 두 가지 형식으로 나타낼 수 있습니다.
#6-2. list 인덱싱과 슬라이싱
앞서 문자열에서 인덱싱과 슬라이싱을 다루었었습니다. list에서도 유사 합니다.
① list 인덱싱
>>> test = "Joy is pretty."
>>> print(test[1])
이렇게 하면 무엇이 출력될까요?
네, ' o ' 가 출력될 것입니다. 왜냐하면 Python에서는 인덱스를 0부터 매기기 때문이죠.
그렇다면,
>>> grade = [30, 40, 50, 60]
>>> print(grade[1])
list에서 1번째 인덱스를 출력하면 어떻게 될까요?
네, ' 40 ' 이 출력됩니다. 문자열 인덱싱과 동일한 개념으로, 해당 번째 요소값이 출력됩니다.
마찬가지로 grade[-1] 이라고 한다면, ' 60 ' 이 되겠죠?
조금 더 깊게 들어가 보겠습니다. 위에서 list를 설명하면서 list 안에 list를 요소값으로 넣을 수 있다고 했습니다. 그렇다면,
>>> a = [1, 2, 3, 4, ['python' , 'is', 'best']]
이렇게 a 라는 list가 있습니다.
>>> print(a[4])
이렇게 a 의 4번째 인덱스를 출력하면 어떻게 될까요??
네 맞습니다. ['python' , 'is' , 'best'] 가 출력될 것입니다.
여기서 한 가지 궁금해집니다. 그렇다면, 출력된 저 list에서 ' is ' 를 출력하고 싶다면 어떻게
해야 할까요?
>>> a = [1, 2, 3, 4, ['python' , 'is' , 'best']]
>>> print(a[4][1])
이렇게 인덱스 2개를 연속으로 붙여주면 됩니다.

잘 출력됩니다.
같은 방식으로, 꼭 list 안의 list의 인덱스를 끌어 오는 것이 아니어도 됩니다. 예를 들어,
>>> b = [1, 2, 3, 'hello', ['python' , 'is' , 'best']]
>>> print(b[3][1])
이렇게 출력하면, 3번째 인덱스인 'hello'에서 1번째 인덱스인 ' e ' 가 출력됩니다.
그리고, list 안의 list인 이중 리스트에서 뿐만 아니라, 삼중 리스트에서도 인덱스를 3개 연달아 쓰면서 끌어올 수 있습니다. 이렇게 복잡한 형태로 사용하는 것은 추천하지 않지만, 참고사항으로 알아 두면 좋습니다.
② list 슬라이싱
슬라이싱도 인덱싱과 같은 느낌입니다. 문자열에서 했던 그대로 이해하면 되며,
이중 리스트에서 인덱스를 연달아 쓸 수 있습니다.
예문 하나로 정리하겠습니다.
>>> a = [1, 2, 3, 4, ['python', 'is', 'best'], 5, 6, 7]
>>> b = a[:3]
>>> c = a[3:6]
>>> d = a[6:]
>>> e = a[4][1:]
위의 예문에서 b, c, d, e를 각각 출력해보겠습니다.

b 는 시작 인덱스부터 3번째 인덱스 전까지 출력합니다. 잘 출력됐습니다.
c 는 3번째 인덱스부터 6번째 인덱스 전까지 출력합니다. list까지 잘 출력됐습니다.
d는 6번째 인덱스부터 끝까지 출력합니다. 잘 출력됐습니다.
e는 4번째 인덱스에서 1번째 인덱스부터 끝까지 끌어옵니다. 이중 리스트에서 잘 가져옵니다.
문자열 인덱스에서 다뤘던 내용과 위에 list의 인덱스에서 다뤘던 내용의 결합물이라고 보시면
이해가 쉬울 것 같습니다.
#6-3. list의 연산
list끼리의 연산도 문자열과 마찬가지로 가능합니다.
① 더하기
>>> a = [1, 2, 3]
>>> b = [4, 5, "python"]
>>> print(a+b)
이렇게 코드를 구성하면, a와 b의 리스트가 합쳐져 출력됩니다.

a와 b 리스트가 하나의 리스트로 합쳐졌습니다.
② 곱하기
>>> a = ['python', 'love']
>>> print(a*3)
이번에는 곱해본다면 어떻게 될까요?
문자열과 동일합니다. 문자열에서 곱할 경우, 그 수만큼 반복해 출력했는데요,
리스트에서도 반복해 출력합니다.

3번 반복해서 잘 출력되었습니다.
③ len 함수
문자열에서 len 함수는 문자열의 길이를 나타내 주었습니다.
리스트에서 len 함수는 리스트의 길이를 나타내 줍니다.
>>> a = [1, 2, 3, 4, 5]
>>> print(len(a))
이렇게 출력하면, 값은 5가 됩니다.

잘 출력되었습니다.
#6-4. list의 수정과 삭제
list는 요소값을 수정하거나 삭제할 수 있습니다.
① 리스트 요소값 수정
>>> a = [1, 2, 3, 3, 5, 6] # a[3]=3
>>> a[3] = 4
>>> print(a)
a[3]은 원래 3이었습니다. 그런데 이 요소값을 4로 수정해주고 싶다면,
line2와 같이 a[3]을 다시 4라고 대입해주면 됩니다. 이렇게 하고 a를 출력해주면,

리스트가 정상적으로 잘 수정되었습니다.
② 리스트 요소값 삭제
1) del 함수
python 안에서 리스트의 요소값은 del 함수를 사용해 삭제할 수 있습니다.
del 함수는 python의 내장함수 중 하나이며, 삭제함수로 사용됩니다.
del 객체
의 형태로 사용됩니다.
*** 객체(Objects) 란?
객체란, python에서 사용되는 모든 자료형을 의미합니다. 예를 들어, 숫자형(number), 문자열(string), 리스트(list), 튜플(tuple), 딕셔너리(dictionary), 집합(set), 불(boolean) 등이 있습니다.
2) 인덱싱 이용
>>> a = [1, 2, 3, 3, 4, 5, 6]
>>> del a[3]
>>> print(a)
이렇게 코드를 구성하면, a[3]인 3을 삭제하게 됩니다.
즉, a를 출력하면 3이 하나 빠진 리스트가 출력됩니다.

잘 출력되는 것을 확인할 수 있습니다.
3) 슬라이싱 이용
슬라이싱을 이용하여 여러가지 요소값을 한 번에 삭제할 수도 있습니다.
>>> a = [1, 2, 3, 'python', 'is', 'new', 4, 5]
>>> del a[3:6]
>>> print(a)
이렇게 구성하면, a[3:6]에 해당하는 요소값들을 한 번에 삭제해줍니다.
a를 출력하면, 요소값들이 삭제된 리스트가 출력되게 될 것입니다.

잘 출력되는 것을 확인할 수 있습니다.
#6-5. list 관련 함수
list에서 리스트 변수 이름 뒤에' . '을 붙여서 여러가지 함수를 사용할 수 있습니다.
매우 많지만, 유용하게 쓰이는 일부만을 다루겠습니다.
① append
영어 뜻 그대로, 리스트의 맨 뒤에 덧붙이는 함수입니다.
>>> a = [1,2]
>>> a.append(3)
>>> print(a)
이렇게 한다면, a 라는 리스트에 3이라는 요소값을 맨 뒤에 추가시켜줘 라는 뜻이 됩니다.
즉, 출력을 하게 되면,

3이 잘 추가되어 출력되었습니다.
앞에서 빈 리스트를 생성할 수 있다고 설명했습니다. 이 것을 활용해 예문을 보겠습니다. 1에서 10까지의 수 중에서 짝수만을 담은 리스트를 만들고 싶다면 어떻게 해야할까요?
>>> a = []
>>> for b in range(1,11):
>>> if b%2==0:
>>> a.append(b)
>>> print(a)
이렇게 구성할 수 있을 것입니다. 1부터 10까지의 범위에 있는 b에 대해서 짝수라면 a리스트에 하나씩 추가하게 되겠죠?

② sort
sort 함수는 리스트의 요소들을 순서대로 나열해 줍니다.
숫자는 내림차 순, 문자는 abc 순이 기본 디폴트 값입니다.
>>> a= [3, 4, 1, 2]
>>> b= ['c', 'a', 'b']
>>> a.sort()
>>> b.sort()
>>> print(a)
>>> print(b)
주의할 점은, .sort( ) 를 사용할 경우, a리스트는 정렬된 리스트로 아예 바뀐다는 것입니다.
즉, 다른 곳에서 a 리스트를 사용해도, 정렬된 리스트가 적용됩니다.

③ reverse
reverse 함수는 말 그대로 역순으로, 리스트의 요소들을 뒤집어 줍니다. 단, 정렬 기능은 없기 때문에, 단순히 리스트의 요소들의 순서만 바꿔주는 역할을 합니다.
>>> a = [1, 5, 3]
>>> a.reverse()
>>> print(a)
이렇게 출력하면, 순서만 뒤바뀐 [3, 5, 1] 이 출력됩니다.
④ index(x)
index(x) 함수는, 리스트에 있는 x라는 요소의 인덱스가 무엇인지 알려줍니다.
>>> a = [1, 20, 300, 7]
>>> b = a.index(300)
>>> print(b)
이렇게 있다면, ' 300 ' 에 해당하는 인덱스가 몇인지 알려줍니다. 즉, a[2]=300 이므로,
2를 출력하게 될 것입니다.
같은 의미에서 a.index(0) 은 ValueError 가 나올 것입니다. 왜냐하면, a 리스트 안에 0이라는
요소가 없기 때문입니다.
⑤ insert(x,y)
insert(x,y) 함수는, 리스트에서 x번째 인덱스에 y라는 요소를 삽입해라 라는 뜻입니다.
>>> a = [1, 2, 3, 4]
>>> a.insert(2,'python')
>>> print(a)
이렇게 하면, a리스트의 2번째 인덱스, 즉, ' 3 ' 이 있는 자리에 'python' 을 삽입해 줍니다.

이렇게 출력될 것입니다.
⑥ remove
remove(x) 함수는, 리스트에서 첫번째로 나오는 x를 제거해 주는 기능을 합니다.
>>> a = [1, 4, 2, 3, 4, 5]
>>> a.remove(4)
>>> print(a)
이렇게 되면, 리스트에서 제일 먼저 나오는 ' 4 '를 제거해 줍니다.

a[1]에 있던 4를 제거한 것을 확인할 수 있습니다. 한번 더 실행 시키면, [1,2,3,5] 가 출력됩니다.
⑦ count
count(x) 함수는 리스트 안에 x라는 요소가 몇 개 있는 지 개수를 세어줍니다.
>>> a = [1, 2, 3, 4, 2, 5, 6, 2]
>>> b = a.count(2)
>>> print(b)
a 리스트 안에 2가 몇 개 있는 지 개수를 세주고 그 결과를 b라고 불러줍니다.
a 리스트 안에 2는 총 3개가 있으므로, 결국 3을 print하게 됩니다.
⑧ extend
extend(x) 함수는 리스트를 더해주는 역할을 합니다. 즉, + 의 역할과 유사합니다.
따라서, x에는 리스트만이 올 수 있습니다.
>>> a = [1, 2, 3]
>>> b = ['python', 'hello']
>>> a.extend(b)
>>> print(a)
b라는 리스트가 a라는 리스트 뒤에 합쳐지게 됩니다. a+b와 같습니다.

잘 출력되는 것을 확인할 수 있습니다.
당연히 b.extend(a) 라고 입력하면, b리스트 뒤에 a리스트가 합쳐지겠죠?
#6-6. list comprehension(리스트 내포)
리스트 내포는 리스트 안에 for문, if문 등 반복문과 조건문을 삽입하여 표현하는 것입니다.
이는 코딩 과정을 매우 짧게 만들어 주기도 하는데요, 위에서 다뤘던 예제로 확인하겠습니다.
1에서 10까지의 수 중에서 짝수만을 담은 리스트를 만들 때 빈 리스트를 활용해서 했습니다.
>>> a = []
>>> for b in range(1,11):
>>> if b%2==0:
>>> a.append(b)
>>> print(a)
이것을 리스트 내포를 활용해 코드를 짜보면,
>>> a = [b for b in range(1,11) if b%2==0]
>>> print(a)
이렇게 구성할 수 있습니다.
1부터 10까지의 수 중에 짝수인 b가 리스트의 요소가 될 것입니다.

좀 더 짧은 문장으로 코드를 구성할 수 있습니다.
이외에도 이중 for문을 사용하는 등의 심화된 리스트 내포 방식들이 있으나, 우선 이 정도만 짚고 넘어가도록 하겠습니다.
#6-7. 튜플(tuple) 과 연산 방법
튜플(tuple)은 list와 매우 흡사하며, list와의 차이점이라면 단 4가지로 압축할 수 있습니다.
① 리스트는 [ ]로 요소를 감싸고, 튜플은 ( )로 요소를 감쌉니다.
② 리스트는 요소의 생성, 삭제, 수정이 가능하나, 튜플은 값을 바꿀 수 없습니다.
③ 튜플은 요소값을 하나만 쓸 경우, 마지막에 콤마( , )를 붙여줘야 합니다.
t1 = (1,)
④ 리스트는 꼭 [ ]로 요소들을 감싸야 하지만, 튜플은 생략할 수 있습니다.
t2 = (1, 2, 3) # 가능
t3 = 1, 2, 3 # 가능
튜플(tuple)의 연산은 리스트의 연산과 모두 같습니다.
인덱싱도 같고, 슬라이싱도 같습니다. 더하기, 곱하기, len함수를 사용해 길이를 구하는 것까지
튜플은 리스트와 비교해, 값을 바꿀 수 없다는 특성만 빼고는 완전히 같습니다.
>>> t1 = (1, 2, 3, 4, 5)
>>> t2 = (5, 6, 7, 8, 9)
>>> a = t1[0]
>>> b = t2[:2]
>>> c = t1+t2
>>> d = t1*2
>>> e = len(t1)
각각 print해 보면, 리스트와 개념이 같다는 것을 알 수 있습니다.
#6-8. tuple의 값을 바꾸는 방법
튜플(tuple)의 요소값은 튜플을 리스트로 변환한 뒤, 바꿀 수 있습니다.
사실 바꾼다는 것 보다는, 새로운 튜플로 만드는 것이 더 적절한 표현인 것 같습니다.
>>> t3 = (1, 2, 3, 3, 4, 5)
위와 같은 튜플이 있습니다. 3이라는 요소값이 중복되어 제거하고 싶다면, 이렇게 바꿀 수 있습니다.
>>> t3 = (1, 2, 3, 3, 4, 5)
>>> list3 = list(t3) # 튜플을 list3 이라는 이름의 리스트로 바꿔줍니다.
# list3=[1, 2, 3, 3, 4, 5]
>>> list3.remove(3) # list3=[1, 2, 3, 4, 5]
>>> t4 = tuple(list3) # 리스트를 t4라는 이름의 튜플로 바꿔줍니다.
>>> print(t4)
이렇게 하면 t4 라는 이름의 새로운 튜플을 생성합니다.

잘 출력되는 것을 확인할 수 있습니다.
댓글