Python 리스트, 튜플 응용문법

이번에는 리스트와 튜플의 응용문법과 예시에 대해 정리해봤습니다.
리스트와 튜플에 공통함수들이 존재하며, 리스트가 추가적인 함수들이 많기 때문에 내용에는 전체적으로 리스트 위주로 작성하였습니다.
내용을 보기에 앞서 리스트와 튜플은 거의 비슷하며, 아래와 같은 차이점이 있으니 참고하시어 적절하게 사용하시기 바랍니다.

  • 리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.
  • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.

리스트 조작 함수

리스트.append(요소) : 리스트 끝에 요소 하나 추가
리스트.extend(다른리스트) : 리스트 끝에 다른리스트를 연결 확장
리스트.insert(인덱스, 요소) : 지정 인덱스에 요소 하나 추가
L=[1,2,3]
L.append(4) #리스트 끝에 4라는 요소 하나 추가
print(L)
print(len(L))
>>>[1,2,3,4]
>>>4

L=[1,2,3]
L.append([4,5]) #리스트 끝에 [4,5]라는 요소 하나 추가
print(L)
print(len(L))
>>>[1,2,3,[4,5]]
>>>4

L=[1,2,3]
L.extend([4,5])
print(L)
print(len(L))
>>>[1,2,3,4,5]
>>>5

L=[1,2,3]
L.insert(2,5) #2번 인덱스에 5라는 요소 하나 추가
print(L)
print(len(L))
>>>[1,2,5,3]
>>>4

L=[1,2,3]
L.insert(2,[4,5]) #2번 인덱스에 [4,5]라는 요소 하나 추가
print(L)
print(len(L))
>>>[1,2,[4,5],3]
>>>4

L=[1,2,3]
L[2:2]=[4,5] #슬라이스를 이용한 요소 추가하는 방법으로
print(L)     #슬라이스의 시작,끝 인덱스를 같게 지정하면 해당 인덱스의 요소를 
print(len(L))#덮어쓰지 않고 요소 여러개를 중간에 추가할 수 있어요
>>>[1,2,4,5,3]
>>>5

지정 인덱스 또는 요소 삭제

리스트.pop(인덱스) : 지정 인덱스 요소 반환 & 삭제, 지정 인덱스가 없으면 마지막 요소 반환 & 삭제
del 리스트[인덱스] : 지정 인덱스의 값을 삭제
리스트.remove(요소) : 특정 값을 찾아서 삭제
L=[1,2,3]
print(L.pop()) #마지막 요소 반환 & 삭제
print(L)
>>>3
>>>[1,2]

L=[1,2,3]
print(L.pop(1)) #1번 인덱스 반환 & 삭제
print(L)
>>>2
>>>[1,3]

L=[1,2,3]
del L[1] #1번 인덱스 삭제
print(L)
>>>[1,3]

L=[1,2,3]
L.remove(2) #2라는 요소 삭제
print(L)
>>>[1,3]

L=[1,2,3,2]    
L.remove(2) #요소 값이 여러개일 경우 처음 찾은 값을 삭제
print(L)
>>>[1,3,2]

리스트.index(요소) : 특정 요소의 인덱스 반환

L=[1,2,3,4,5]
print(L.index(4))
>>>3

리스트.count(요소) : 특정 요소의 개수 반환

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

리스트.reverse() : 리스트의 순서 뒤집기

L=[1,2,3,4,1,2,1,5]
L.reverse()
print(L)
>>>[5,1,2,1,4,3,2,1]

리스트의 요소 정렬

리스트.sort(reverse=False) : 리스트의 요소 정렬,

* reverse = False는 디폴트값으로 생략해도 된다.
* False면 작은 순으로 True면 큰 순으로 정렬된다.

sorted(리스트) : 정렬된 새 리스트를 생성

L=[1,2,3,4,1,2,1,5]
L.sort() #L 리스트의 내용을 오름차순 정렬 
print(L)
>>>[1,1,1,2,2,3,4,5]

L=[1,2,3,4,1,2,1,5]
print(sorted(L)) #정렬된 새 리스트를 생성
print(L)
>>>[1,1,1,2,2,3,4,5]
>>>[1,2,3,4,1,2,1,5]

리스트.clear() : 리스트의 모든 요소 삭제

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

L=[1,2,3]
del L[:] #del과 슬라이스를 이용한 삭제
print(L)
>>>[]

리스트의 할당과 복사

엄연히 할당과 복사는 큰 차이점이 있다고 한다.
할당은 메모리 주소를 공유하기 때문에 같은 데이터를 바라보고 있는 것이다.
복사는 새로운 메모리 주소에 데이터를 생성하는 것이다.
#할당 예
a=[1,2,3,4,5]
b=a    #같은 메모리 주소 공유
print(a is b)
>>>True

a=[1,2,3,4,5]
b=a    #같은 메모리 주소 공유
b[2]=10
print(a)
print(b)
>>>[1,2,10,4,5]
>>>[1,2,10,4,5]

#복사 예
a=[1,2,3,4,5]
b=a.copy()
print(a is b)    #리스트 id 비교
print(a == b)    #리스트 값 비교
>>>False
>>>True

a=[1,2,3,4,5]
b=a.copy()
b[2]=10
print(a)
print(b)
>>>[1,2,3,4,5]
>>>[1,2,10,4,5]

반복문(for, while)을 이용한 리스트 요소 출력

#for 사용
a=[1,2,3,4,5]
for n in a:      #for n in [1,2,3,4,5]: 와 동일
    print(n)
>>>1
>>>2
>>>3
>>>4
>>>5

#while 사용
a=[1,2,3,4,5]
i=0
while i<len(a):
    print(a[i])
    i+=1
>>>1
>>>2
>>>3
>>>4
>>>5

반복문을 이용한 리스트 인덱스, 요소 출력

enumerate 함수의 요소로 리스트를 넣으면 인덱스와 요소를 동시에 꺼낼 수 있다.

a=[1,2,3,4,5]
for index, value in enumerate(a):
    print(index, value)
>>>0 1
>>>1 2
>>>2 3
>>>3 4
>>>4 5

a=[1,2,3,4,5]
#start를 지정해 첫 인덱스 숫자를 지정해줄 수 있다.
for index, value in enumerate(a,start=1):    #enumerate(a,1): 과 동일
    print(index, value)                        
>>>1 1
>>>2 2
>>>3 3
>>>4 4
>>>5 5

가장 작은 수와 가장 큰 수 구하기

#값을 비교하여 최솟값을 찾는 방법
a=[4,3,1,5,2]
smallest=a[0]
for i in a:
    if i < smallest:
        smallest=i
print(smallest)
>>>1

#값을 비교하여 최댓값을 찾는 방법
a=[4,3,1,5,2]
largest=a[0]
for i in a:
    if i > largest:
        largest=i
print(largest)
>>>5

#sort()를 이용하여 최솟값을 찾는 방법
a=[4,3,1,5,2]
a.sort()
print(a[0])
>>>1

#sort()를 이용하여 최댓값을 찾는 방법
a=[4,3,1,5,2]
a.sort(reverse=True)
print(a[0])
>>>5

#min(), max()함수를 이용하여 최솟값, 최댓값 찾는 방법
a=[4,3,1,5,2]
print(min(a))
print(max(a))
>>>1
>>>5

리스트 컴프리헨션(list comprehension, 리스트 표현식)

리스트 안에 식, for나 if를 지정해서 리스트를 생성하는 것을 의미한다. 파이썬의 특장점으로 코드 간소화하는데 많은 도움을 주며, 상당히 중요한 표현식이다.
a=[i for i in range(5)]
print(a)
>>>[0,1,2,3,4]

b=list(i for i in range(5))
print(b)
>>>[0,1,2,3,4]

a=[i+5 for i in range(5)]
print(a)
>>>[5,6,7,8,9]

b=list(i*2 for i in range(5))
print(b)
>>>[0,2,4,6,8]

a=[i for i in range(5) if i%2==0]
print(a)
>>>[0,2,4]

a=[i*j for j in range(3)
       for i in range(3)]
print(a)
>>>[0,0,0,0,1,2,0,2,4]

리스트에 map사용하기

리스트(map(함수, 리스트)) : 리스트의 요소를 지정된 함수로 처리해주 함수이다.(원본 리스트 변경없이 새 리스트 생성)
a=list(map(int,range(5)))
print(a)
>>>[1,2,3,4,5]

a=list(map(int, input().split()))
>>>1 2 3 4
print(a)
>>>[1,2,3,4]

리스트, 튜플 메서드

튜플은 값에 대한 생성, 삭제, 수정이 불가능하므로 이러한 기능을 하는 함수는 튜플에서 사용이 불가하다
메서드설명리스트튜플
append(값)
append(리스트)
리스트 끝에 값을 추가, 리스트[len(리스트):] = [값]과 같음리스트를 넣으면 리스트 안에 리스트가 들어감O
extend(리스트)리스트 끝에 다른 리스트 연결, 리스트[len(리스트):] = [값, 값]과 같음O
insert(인덱스, 값)리스트의 특정 인덱스에 값을 추가O
pop()
pop(인덱스)
리스트의 마지막 값을 삭제한 뒤 삭제한 값을 반환인덱스를 지정하면 해당 인덱스의 값을 삭제한 뒤 삭제한 값을 반환, del 리스트[인덱스]와 같음O
remove(값)리스트에서 특정 값을 삭제O
index(값)리스트에서 특정 값의 인덱스를 구함OO
count(값)리스트에서 특정 값의 개수를 구함OO
reverse()리스트에서 값의 순서를 반대로 뒤집음O
sort()
sort(reverse=False)
리스트의 값을 작은 순서대로 정렬(오름차순)reverse=True는 큰 순서대로 정렬(내림차순)O
sorted(리스트)정렬된 새 리스트를 생성OO
clear()리스트의 모든 값을 삭제, del a[:]와 같음O
copy()리스트를 복사하여 새 리스트 생성O
len()리스트에 있는 요소 개수 반환OO
max()리스트에 있는 요소 중 최댓값 반환OO
min()리스트에 있는 요소 중 최솟값 반환OO
sum()리스트의 요소들의 합을 반환OO
<표 참고링크. https://dojang.io/mod/page/view.php?id=2305>