[파이썬(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 (연산자와 피연산자)

 

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