[Python] 리스트(List)와 리스트 메소드(append, insert, remove, pop, extend)

토끼는 개발개발·2021년 8월 1일
1

Python

목록 보기
2/11
post-thumbnail

✏️ 1. 리스트(List)


리스트(List) 타입은 파이썬의 자료구조 형태 중 하나로 원소들이 연속적으로 저장되는 형태의 자료형이다. 리스트를 만드는 방법에는 2가지가 있다. '대괄호'와 'list()'를 이용한 방법이다.

다음은 리스트를 구현한 코드이다.

a = [1,2,3,4]
b = ['h','i']
c = ['hello']
d = list('hello')
print(d)

#print결과
['h', 'e', 'l', 'l', 'o']


📌 1-1. 리스트의 인덱싱(List Indexing)


리스트는 자리 번호표를 가지고 있다. 즉, 문자열처럼 인덱싱과 슬라이싱이 가능하다.
리스트의 인덱싱은 리스트의 자리번호(index)를 이용해 원하는 자리의 값을 뽑아내는 것이다.
파이썬은 숫자를 0부터 세기 때문에 a[0]이 리스트의 첫 번째 요소이다.

다음은 리스트의 인덱싱을 구현한 코드이다.

a = [1,2,3]
print(a[0])
print(a[1])
print(a[2])

#print 결과
1
2
3

이번에는 리스트 안에 리스트 ['a', 'b', 'c']를 요소로 넣어보자.
마지막 요소는 [-1]로 표현될 수 있다.

다음은 이중 리스트에서 인덱싱을 구현한 코드이다.

a = [1,2,3,['a', 'b', 'c']]
print(a[-1])

#print결과
['a', 'b', 'c']

a 리스트에서 'b'를 끄집어내려면 어떻게 해야할까?
'b'는 리스트a의 [-1]안의 [1]자리에 있다.

print(a[-1][1])

#print 결과
'b'

인덱싱을 통한 리스트 값끼리의 연산도 가능할까?
단, 리스트끼리의 연산과 인덱싱을 통한 연산은 의미가 다르다는 것을 유의해야 한다.

다음은 리스트 인덱싱을 통한 연산을 구현한 코드이다.

a = [1, 2, 3]
print(a[0] + a[2])

#print 결과
4


📌 1-2. 리스트의 슬라이싱(List Slicing)

리스트의 슬라이싱은 **리스트의 요소들 중 원하는 부분만 잘라내서 가져오는 것**이다. 파이썬에서 슬라이싱은 대괄호[]와 콜론:을 이용해서 진행한다. 예를 들어 리스트 a = [1, 2, 3, 4, 5]에서 index 1번부터 3번까지만 필요하다고 가정하면 해당 코드를 다음과 같이 구현할 수 있다.

다음은 리스트의 슬라이싱을 구현한 코드이다.

a = [1, 2, 3, 4, 5]
print(a[1:4])

#print 결과
[2, 3, 4]

💡 index 1번부터 3번까지를 슬라이싱하는데 왜 a[1:3]이 아닌 a[1:4]일까?
인덱스의 슬라이싱은 앞의 예시처럼 a[1:4]에서 4번째 인덱스를 포함하지 않고 가져온다.
즉, 4미만인 4-1 = 3번 index까지만 가지고 온다는 뜻이다.

리스트가 포함된 중첩된 리스트 역시 슬라이싱을 적용할 수 있다.

다음은 중첩 리스트의 슬라이싱을 구현한 코드이다.

a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
print(a[3][:2])

#print 결과
['a', 'b']


이 외에도 다양한 예를 확인해 보자.

다음은 슬라이싱을 여러가지 방법으로 구현한 코드이다.

a = [1, 2, 3, 4, 5, 6]
print(a[3:]) # 3번 index부터 끝까지
print(a[:3]) # 3번 index미만까지(2번 index까지)
print(a[1:5:2]) # 1번 index이상 5번 index미만 2개씩
print(a[::-1]) # 거꾸로
print(a[:]) # 처음부터 끝까지

#print 결과
[4, 5, 6]
[1, 2, 3]
[2, 4]
[6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6]


📌 1-3. 리스트의 연산


리스트는 문자열과 마찬가지로 + 기호를 사용해 더하거나 * 기호를 사용해 반복할 수 있다.

리스트 사이에서 + 기호는 2개의 리스트를 합치는 기능을 한다.

다음은 리스트 간 덧셈을 구현한 코드이다.

a = [1, 2, 3]
b = [4, 5, 6]
print(a+b)

#print 결과
[1, 2, 3, 4, 5, 6]

리스트 사이에서 * 기호는 반복하여 새로운 리스트를 만들어낸다.
다음은 리스트 간 곱셈을 구현한 코드이다.

a = [1, 2, 3]
print(a*3)

#print 결과
[1, 2, 3, 1, 2, 3, 1, 2, 3]


📌 1-4. 리스트의 수정과 삭제


위에서 배운 인덱싱과 슬라이싱을 통해 리스트를 수정하고 삭제할 수 있다.
리스트[N] = 값

다음은 인덱싱(indexing)을 이용해 리스트 값을 수정한 코드이다.

a = [1, 2, 3]
a[2] = 4
print(a)

#print 결과
[1,2,4]


리스트 인덱싱과 슬라이싱을 이용해 특정 범위 혹은 특정 요소를 삭제할 수 있다.
이 때, del 함수를 이용한다.

다음은 del 함수를 이용해 리스트의 특정 범위 혹은 특정 요소를 삭제한 코드이다.

a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]

del(a[1]) # 리스트 a의 1번 index 삭제
del(b[:4]) # 리스트 b의 0번 index부터 3번 index까지 삭제

print(a)
print(b)

#print 결과
[1, 3, 4, 5][5]


📌 1-5. 리스트 메소드(List Methods)



1-5-1. list.append(x) - 리스트에 값 추가

append 함수는 리스트의 끝에 x 값을 추가하는 함수이다.

다음은 append 함수를 구현한 코드이다.

a = [1, 2, 3]
a.append(4)
print(a)

#print결과
[1, 2, 3, 4]


1-5-2. list.insert(a,b) - 리스트의 특정위치에 값 추가

insert 함수는 리스트의 a 위치에 b 값을 추가하는 함수이다.

다음은 insert 함수를 구현한 코드이다.

a = [1, 2, 3]
a.insert(0, 0)
print(a)

#print 결과
[0, 1, 2, 3]


1-5-3. list.remove(x) - 리스트에서 특정 값 제거

remove 함수는 리스트의 특정 값 x를 찾아서 제거하는 함수이다.

다음은 remove 함수를 구현한 코드이다.

a = [1, 2, 3, 3, 4, 5]
a.remove(1)
print(a)

#x가 리스트에 여러개 있을 경우
a.remove(3)
print(a)

#x가 리스트에 존재하지 않는 경우
a.remove(6)
print(a)

#print 결과
[2, 3, 3, 4, 5] # 1 제거
[2, 3, 4, 5] # 맨 처음 3 제거 (모든 3을 제거하지 않는다.)
Error # 에러

💡 x가 리스트에 여러개 있다면, 모든 x가 아닌 맨 처음 x만 지운다.


1-5-4. list.pop() - 리스트 맨 마지막 값 반환 후 삭제

pop 함수는 리스트 가장 뒤에 있는 값을 반환한 후에 리스트에서 해당 값을 삭제하는 함수이다.

다음은 pop 함수를 구현한 코드이다.

a = [1, 2, 3, 4, 5]
b = a.pop()
print(a)
print(b)

#print 결과
[1, 2, 3, 4][5]

💡 b = a.pop()에서 a의 마지막 요소를 b에 반환 후 a에서 해당값을 삭제한다.


1-5-5. list.extend(list2) - 리스트에 리스트2 연결

extend 함수는 확장 함수로 리스트2를 연결해주는 함수이다.
(list2)에는 반드시 리스트형이 와야한다.

다음은 extend 함수를 구현한 코드이다.

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

#리스트a에 리스트b 연결
a.extend(b)
print(a)

#리스트a에 리스트[7,8] 연결
a.extend([7,8])
print(a)

#print 결과
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7, 8]


1-5-6. list.count(x) - 리스트 값 x의 개수 세기

count 함수는 리스트 요소들 중 x와 같은 값이 몇 개 있는지 개수를 세는 함수이다.

다음은 count 함수를 구현한 코드이다.

a = [1, 2, 3, 4, 4, 4, 5]
print(a.count(4))

#print 결과
3


1-5-7. list.index(x) - 리스트 값 x의 위치(index) 반환

index 함수는 리스트 요소 중 x의 위치를 index로 반환하는 함수이다.

다음은 index 함수를 구현한 코드이다.

a = [1, 2, 3, 3, 4, 5, 6]
print(a.index(2))
print(a.index(3))
print(a.index(7))

#print 결과
1
2
Error

💡 리스트에 x가 여러개 있을 경우 맨 처음 찾은 x의 위치를 반환한다. x가 없을 경우 Error가 발생한다.


1-5-8. list.sort() - 리스트 정렬

sort 함수는 리스트의 내부 요소를 오름차순으로 정렬해주는 함수이다.
sort 함수를 사용하기 위해서는 내부 자료형이 int 혹은 str로 타입이 통일되어 있어야 한다.
비교 불가능한 값들은 정렬도 불가능하다.

다음은 sort 함수를 구현한 코드이다.

a = [1, 4, 2, 3]
b = [1, 'a', 2]
c = ['b', 'a', 'c']
a.sort()
b.sort()
c.sort()

print(a)
print(b)
print(c)

#print 결과
[1, 2, 3, 4]
Error
['a', 'b', 'c']

💡 리스트b의 요소는 비교불가능한 요소들이므로(통합x) Error가 발생한다.


1-5-9. list.reverse() - 리스트 뒤집기

reverse 함수는 리스트 내부 요소들을 전체 뒤집는다. (반환x)

다음은 reverse 함수를 구현한 코드이다.

a = [1, 2, 3]
a.reverse()
print(a)

#print 결과
[3, 2, 1]


1-5-10. list.copy() - 리스트 복사

copy 함수는 리스트를 복사하고 반환하는 함수이다.

다음은 copy 함수를 구현한 코드이다.

a = [1, 2, 3]
b = a.copy()
print(a)
print(b)
print(id(a))
print(id(b))

#print 결과
[1, 2, 3]
[1, 2, 3]
2172001242240
2172001245760

💡 a와 b의 아이디가 다르므로 복사했으나 서로 다른 리스트인 것을 알 수 있다.


1-5-11. list.clear() - 리스트에 저장된 모든 값 삭제

clear 함수는 리스트 내부의 모든 요소들을 삭제하는 함수이다.
리스트 자체를 삭제하는게 아닌 내부 요소들만 삭제하기에 리스트 객체 자체는 남아 있다.
즉, 비어있는 리스트가 된다.

다음은 clear함수를 구현한 코드이다.

a = [1, 2, 3]
a.clear()
print(a)

#print 결과
[]


📌 1-6. 파이썬 내장함수 for 리스트


리스트에서 주로 쓰이는 파이썬의 내장함수에는 len, max, min, list가 있다.


1-6-1. len(list) - 리스트 길이

len 내장함수는 리스트, 튜플, 문자열, 딕셔너리 등을 입력받아 해당 객체의 원소개수를 반환하는 함수이다.

다음은 len함수를 구현한 코드이다.

a = [1, 2, 3]
print(len(a))

#print 결과
3


1-6-2. max(list) - 리스트 요소 중 최대 요소 반환

max 내장함수는 입력값 혹은 객체의 원소 중 최댓값을 반환하는 함수이다.

다음은 max함수를 구현한 코드이다.

a = [1, 2, 3]
print(max(a))

#print 결과
3


1-6-3. min(list) - 리스트 요소 중 최소 요소 반환

min 내장함수는 입력값 혹은 객체의 원소 중 최솟값을 반환하는 함수이다.

다음은 min함수를 구현한 코드이다.

a = [1, 2, 3]
print(min(a))

#print 결과
1


1-6-4. list(seq) - 문자열 혹은 튜플을 리스트로 변환

list 내장함수는 문자열이나 튜플을 입력받은 후 리스트 객체로 만들고 해당 리스트를 반환하는 함수이다.

다음은 list함수를 구현한 코드이다.

a = list('hello')
b = list((1,2,3))
print(a)
print(b)

#print 결과
['h', 'e', 'l', 'l', 'o'][1, 2, 3]

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다

0개의 댓글