[파이썬(Python)] 자료형 - linked list (iterable) - 리스트

2022. 10. 12. 17:35파이썬

Iterable: 반복 가능한, 순서가 있는

List [ ]: mutable

리스트는 비어있을 수도 있고, 숫자나 문자를 요솟값으로 가질 수도 있고, 리스트를 요솟값으로 가질 수도 있고...

즉, 모든 자료형이 리스트의 요솟값이 될 수 있다.

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = [1, 2, 'a']
d = [1, [2, 3], 4]

- 인덱싱

a = [1, 2, 3]
>>> a[0]
1
>>> a[2]
3
>>> a[-1] # 문자열 인덱싱처럼
3

그러면 리스트 안에 리스트가 있는 경우(이중 리스트) 인덱싱이 어떻게 될까?

a = [1, 2, [3, 4, 5]]
>>> a[2]
[3, 4, 5]
# 그러면 'a[2]' 자체가 또다른 리스트니까, 'a[2]'[0] 이 3이 된다!
>>> a[2][2]
5

혹시 문자열 인덱싱까지 쓸 수 있을까?

a = ["python"]
>>> a[0]
"python"
# 'a[0]' 은 문자열이니까,'a[0]'[0] 은 p가 될거야
>>> a[0][1]
'y'

- 슬라이싱

문자열처럼 슬라이싱 가능! 슬라이싱 결과물은 또다른 리스트가 된다.

a = [1, 2, 3, 4, 5]
b = a[1:3]
c = a[:2]
>>> b
[2, 3]
>>> c
[1, 2]

- 리스트 연산

문자열과 동일하다.

리스트를 더한다고 값이 더해지는게 아님!

a = [1, 2, 3]
b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
>>> a * 2
[1, 2, 3, 1, 2, 3]

 

- len 함수 (리스트 길이 구하기)

a = [0, 1, 2, 3, 4 ,5]
>>> len(a)
6

len 함수의 결과값은 int형이다.

 

- 리스트  값 수정 및  삭제

리스트는 mutable (문자열은 immutable) 하므로 수정 가능!

a = [1, 2, 3]
a[2] = 100
>>> a
[1, 2, 100]

어 그러면 리스트니까 리스트의 문자열도 수정이 되나..? -> 안됨. 문자열은 immutable하니까

a = [1, 2, 'abc']
a[0] = 3
>>> a
[1, 2, 3]
b = [0, 5, 'ten']
b[2] = 'nine'
>>> b
[0, 5, 'nine']
c = ['a', 'ab', 'abc']
c[2][0] = 'd' ###################### TypeError

 

리스트 인덱스를 이용해 요소 삭제하기

a = [1, 2, 3]
del a[1]
>>> a
[1, 3]
b = [1, 2, 3, 4, 5]
del b[:2]
>>> b
[3, 4, 5]

- 리스트  관련 함수

리스트 변수 뒤에 '.함수명()' 을 붙여서 리스트 관련 함수들을 사용할 수 있다.

append, sort, reverse, index, insert, remove, pop, count, extend

# append (요소 추가)
a = ['a', 'b', 'c']
a.append('d') # 항상 맨 마지막에 요소 추가
>>> a
['a', 'b', 'c', 'd']
# sort (정렬)
b = [1, 3, 4, 0]
c = ['A', 'c', 'a', 'D'] # 아스키 코드를 기준으로 정렬되는 것
b.sort()
c.sort()
>>> b
[0, 1, 3, 4]
>>> c
['A', 'D', 'a', 'c']
# reverse (역, 현재의 순서를 역순으로)
a = [0, 3, 2, 5, 6]
a.reverse()
>>> a
[6, 5, 2, 3, 0]
# index (인덱스 반환)
a = [5, 'a', 6, 8]
>>> a.index(5)
0
>>> a.index('a')
1
>>> a.index(4)
ValueError: ~~~
# insert (요소 삽입) insert(a, b): a번째 위치에 b 삽입
a = [1, 2, 3]
a.insert(1, 1)
>>> a
[1, 1, 2, 3]
# remove (요소 제거) remove(x): x를 삭제하는데, 가장 앞에 있는 x를 삭제
a = [1, 3, 1, 3, 1, 3]
a.remove(3)
>>> a
[1, 1, 3, 1, 3]
# pop (팝!) pop(): 마지막 요소를 반환, 리스트에서 삭제, pop(x): 인덱스 x번째 요소 반환, 리스트에서 삭제
a = [1, 2, 3, 4]
>>> a.pop()
4
>>> a
[1, 2, 3]
>>> a.pop(0)
1
>>> a
[2, 3]
# count (개수 세기) count(x): 리스트 안에 x가 몇 개 있는지 세기
# 단, 리스트의 요소 기준이고, 요소의 요소 같은건 못 센다
a = ['a', 'b', 'c', ['a', 'a']]
>>> a.count('a')
1
# extend (확장) extend(x): x는 리스트만 가능, 원래의 리스트에 x 리스트 더해서 확장
a = [1, 2, 3]
a.extend(['a', 'ab', ['abc'])
>>> a
[1, 2, 3, 'a', 'ab', ['abc']]

 

 

*** 참고

dir(structure): 사용할 수 있는 함수들이 출력된다!

>>> dir(list)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

 

*** operator와 operand (연산자와 피연산자)

 

*** 자료구조를 왜 쓰는지!