Programming/Python

[코딩도장-파이썬] 리스트(List)와 튜플(Tuple) 응용하기 1

Supreme_YS 2020. 11. 18. 22:38

리스트와 튜플 응용에 앞서 리스트와 튜플에 대한 기초 지식을 아래 링크에 정리했습니다. 이번 공부를 하시기에 앞서 참고하시면 좋을 것 같습니다.


supreme-ys.tistory.com/35

 

[코딩도장-파이썬] 리스트(List)

._리스트 : 목록이라는 뜻이며 값을 일렬로 늘어놓은 형태이다.(보통 리스트의 값은 코드로 생성하는 경우가 많기 때문에 타이핑 할 일이 거의 없다. ._리스트 만들기 : 변수에 값을 저장할 때 [ ]

supreme-ys.tistory.com

supreme-ys.tistory.com/36

 

[코딩도장-파이썬] 튜플(Tuple)

._튜플 = (값, 값, 값)  튜플 = 값, 값, 값 튜플은 리스트처럼 요소를 일렬로 저장하지만, 안에 저장된 요소를 변경, 추가, 삭제를 할 수 없다. 간단하게 읽기 전용 리스트라고 할 수 있다. 변수에 값

supreme-ys.tistory.com


1. 리스트 조작하기

리스트를 조작하는 메서드(Method), 메서드는 객체에 속한 함수를 뜻합니다. 파이썬에서 제공하는 리스트 메서드는 여러 가지가 있지만 자주 쓰는 메서드 위주로 설명하겠습니다.

 

1-1. 리스트 요소 추가하기

  • append: 요소 하나를 추가
  • extend: 리스트를 연결하여 확장
  • insert: 특정 인덱스에 요소 추가
a = [10, 20, 30]
a.append(500)
print(a)
a = [10, 20, 30]
a.append([500, 600])
print(a)
a.extend([500, 600]) 
print(a) 
[10, 20, 30, 500] [10, 20, 30, [500, 600]] #리스트 안에 리스트 추가(중첩리스트) [10, 20, 30, 500, 600]

append(리스트) / extend(리스트) 동작 출처. 코딩도장

아래 extend(리스트)는 리스트 끝에 다른 리스트를 연결하여 리스트를 확장합니다. 모양은 append(리스트)와 똑같지만 결과값은 아주 다릅니다. append는 위 표의 오른쪽 셀처럼 리스트 안에 리스트가 들어간 형태지만, 아래의 extend는 리스트를 넣었지만 단일 리스트로 출력이 됩니다. 따라서, len 함수로 리스트의 길이를 출력하면 append(리스트)는 4, 아래의 extend(리스트)는 5가 출력이 됩니다. 즉, extend를 사용하면 리스트의 길이는 extend에 전달된 리스트의 길이만큼 증가합니다.

 

a = [10, 20, 30]
a.insert(2, 500)
print(a)
a = [10, 20, 30]
a.insert(0, 500)
a = [10, 20, 30]
a.insert(len(a), 500)
print(a)
a = [10, 20, 30]
a.insert(1, [500, 600])
print(a)
a = [10, 20, 30]
a[1:1] = [500, 600] 
print(a)
[10, 20, 500, 30] [500, 10, 20, 30] [10, 20, 30, 500] [10, [500, 600], 20, 30] [10, 500, 600, 20, 30]
insert(인덱스, 요소)는 리스트의 특정 인덱스에 요소 하나를 추가합니다.  len(a)의 값이 3이므로, a리스트의 끝에 500이란 값을 추가하는 방법, 주로 리스트 끝에 값을 추가할 때 자주 활용합니다. a.append(500)과 같은 방법이긴 합니다.^_^ 특히 insert는 요소 하나를 추가하므로 insert에 리스트를 넣으면 append처럼 리스트 안에 리스트가 들어갑니다. 인덱스 1에 리스트 [500, 600]을 추가하여 중첩 리스트가 됩니다. a[1:1] = [500, 600]과 같이 시작 인덱스와 끝 인덱스를 같게 지정하면 해당 인덱스의 요소를 덮어쓰지 않으면서 요소 여러 개를 중간에 추가할 수 있습니다.

 

1-2 요소 삭제하기

  • pop: 마지막 요소 또는 특정 인덱스의 요소를 삭제
  • remove: 특정 값을 찾아서 삭제
a = [10, 20, 30]
a.pop()
print(a)
a = [10, 20, 30]
a.pop(1)
print(a)
a = [10, 20, 30]
del a[1] 
print(a)
[10, 20] [10, 30] [10, 30]

remove(값)은 리스트에서 특정 값을 찾아서 삭제합니다.

a = [10, 20, 30] 
a.remove(20)
print(a)
a = [10, 20, 30]
a.append(20)
a.remove(20)
print(a)
[10, 30] [10, 30, 20] # 리스트에 같은 값이 여러 개 있을 경우 처음 찾은 값을 삭제합니다

1-3 리스트에서 특정 값의 인덱스 구하기

index(값)은 리스트에서 특정 값의 인덱스를 구합니다. 이때 같은 값이 여러 개일 경우 처음 찾은 인덱스를 구합니다(가장 작은 인덱스). 다음은 20이 두 번째에 있으므로 인덱스 1이 나옵니다.

 

a = [10, 20, 30, 15, 20, 40]
print(a.index(20))
1

 

1-4 특정 값의 갯수 구하기

a = [10, 20, 30, 15, 20, 40] 
print(a.count(20))
2

 

1-5 리스트의 순서 뒤집기

a = [10, 20, 30, 15, 20, 40]
a.reverse()
print(a)
여기서 질문이 있습니다.
a = [10, 20, 30, 15, 20, 40]
print(a.reverse()) 를 실행하면

None이 출력이 되는데..혹시 아시는 분 댓글로 알려주세요.
[40, 20, 15, 30, 20, 10]

1-6 리스트의 요소를 정렬하기

sort()는 리스트의 요소을 작은 순서대로 정렬합니다(오름차순). 다음은 리스트 [10, 20, 30, 15, 20, 40]의 값을 작은 순서대로 정렬하여 [10, 15, 20, 20, 30, 40]이 됩니다. 파이썬은 리스트의 sort 메서드뿐만 아니라 내장 함수 sorted도 제공합니다. sort와 sorted 모두 정렬을 해주는 함수지만, 약간의 차이점이 있습니다. sort는 메서드를 사용한 리스트를 변경하지만, sorted 함수는 정렬된 새 리스트를 생성합니다.

  • sort() 또는 sort(reverse=False): 리스트의 값을 작은 순서대로 정렬(오름차순)
  • sort(reverse=True): 리스트의 값을 큰 순서대로 정렬(내림차순)
a = [10, 20, 30, 15, 20, 40]
a.sort()
print(a)
a = [10, 20, 30, 15, 20, 40]
a.sort() 
print(a)
b = [10, 20, 30, 15, 20, 40]
print(sorted(b)) # 정렬된 새 리스트를 생성
[10, 15, 20, 20, 30, 40] [10, 15, 20, 20, 30, 40] [10, 15, 20, 20, 30, 40] # 새 리스트

 

1-7 리스트 모든 요소를 삭제하기, 슬라이스로 조작하기

clear()는 리스트의 모든 요소를 삭제합니다. 다음은 리스트 [10, 20, 30]의 모든 요소를 삭제하여 빈 리스트 []가 됩니다.

a[len(a):]는 시작 인덱스를 len(a)로 지정해서 리스트의 마지막 인덱스보다 1이 더 큰 상태입니다. 즉, 그림과 같이 리스트 끝에서부터 시작하겠다는 뜻입니다(이때는 리스트의 범위를 벗어난 인덱스를 사용할 수 있습니다).

a = [10, 20, 30]
a.clear()
print(a)
a = [10, 20, 30]
a[len(a):] = [500]
print(a)
[ ] [10, 20, 30, 500]

 

1-8 리스트가 비어 있는지 확인하기

리스트(시퀀스 객체)가 비어 있는지 확인하려면 if 조건문으로 판단하여 리스트가 비어 있는지 확인할 수 있습니다.

 

if not len(seq): # 리스트가 비어 있으면 True
if len(seq): # 리스트에 요소가 있으면 True

하지만 파이썬에서는 이 방법보다 리스트(시퀀스 객체)를 바로 if 조건문으로 판단하는 방법을 권장합니다.

 

if not seq: # 리스트가 비어 있으면 True
if seq: # 리스트에 내용이 있으면 True