리스트와 튜플 응용하기

Sean·2021년 6월 2일

파이썬

목록 보기
2/3
post-thumbnail

요소 추가하기

append(요소)

리스트 끝에 요소 하나 추가
요소에 리스트를 넣으면 중첩 리스트가 된다.
메서드를 호출한 리스트가 변경되며 새 리스트는 생성되지 않는다.

extend(리스트)

리스트에 요소를 여러 개 추가할 수 있다.
리스트 끝에 다른 리스트를 연결하여 리스트 확장
메서드를 호출한 리스트가 변경되며 새 리스트는 생성되지 않는다.

insert(인덱스, 요소)

원하는 위치에 요소를 추가할 수 있다.
리스트의 특정 인덱스에 요소 하나를 추가

  • insert(0, 요소) : 맨 처음
  • insert(len(리스트), 요소) : 맨 끝 -> append(요소)와 동일

리스트 중간에 요소 여러 개를 추가하고 싶다면?

시퀀스 자료형에서 배운 '슬라이스에 요소 할당하기'를 활용한다.
리스트[1:1] = [100, 200]과 같이 시작인덱스와 끝인덱스를 같게 지정하면 해당 인덱스의 요소를 덮어쓰지 않으면서 요소 여러 개를 중간에 추가할 수 있다.

요소 삭제하기

pop(인덱스)

해당 인덱스의 요소를 삭제한 뒤 삭제한 요소를 반환
인덱스를 생략하면 리스트의 마지막 요소를 삭제한 뒤 삭제한 요소를 반환한다.
pop 대신 del도 가능하다.

remove(값)

리스트에서 특정 값을 찾아서 삭제
같은 값이 여러 개 있을 경우 처음 찾은 값을 삭제한다.

리스트로 스택과 큐 만들기

스택

append(), pop()

append(), pop(0) 또는 insert(0, 요소), pop()

큐는 좀 더 효율적으로 사용하도록 데크(deque, double ended queue)라는 자료형을 제공한다.
collections 모듈에서 deque를 가져와 사용한다.
-> from collections import deque

  • deque(반복가능한객체)

append(), popleft() 또는 appendleft(), pop()

index(값)

리스트에서 특정 값의 인덱스를 구한다.
값은 값이 여러 개일 경우 처음 찾은 인덱스(가장 작은 인덱스)를 구한다.

count(값)

리스트에서 특정 값의 개수를 구한다.

reverse()

리스트에서 요소의 순서를 반대로 뒤집는다.

sort(reverse=False)

리스트의 요소를 작은 순서대로 정렬한다.-> 오름차순
sort()로 간단히 작성할 수도 있다.
내림차순 정렬은 reverse옵션을 True로 설정하면 된다.

clear()

리스트의 모든 요소를 삭제한다.

리스트를 슬라이스로 조작하기

리스트 메서드를 사용하지 않고, 슬라이스로 조작하면 성능적으로도 더 좋다.

# 동일한 효과
a[len(a):] = [500]
a.append(500)

# 동일한 효과
a[len(a):] = [500, 600]
a.extend([500, 600])

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

리스트의 마지막 요소에 접근할 때 유용하게 사용 가능

  1. (PEP8 권장) 리스트(시퀀스 객체)를 바로 if 조건문으로 판단하기
if not seq: # 리스트가 비어 있으면 True
if seq: # 리스트에 내용이 있으면 True
  1. len 함수 이용하기
if not len(seq): # 리스트가 비어 있으면 True
if len(seq): # 리스트에 요소가 있으면 True

활용

seq = []
if seq:
    print(seq[-1])

리스트 할당과 복사

할당 시 같은 객체를 참조한다.
따라서 완전히 두 개로 만들려면 copy 메서드로 모든 요소를 복사해야 한다.

a = [0, 0, 0, 0, 0]
b = a # 할당
b = a.copy() # 복사

요소 출력하기

for 변수 in 리스트:

리스트에서 요소를 꺼내서 변수에 저장하고, 꺼낼 때마다 코드를 반복한다.
모든 요소를 순서대로 출력 가능

range에 len으로 리스트의 길이를 구해서 넣어주면 인덱스를 순서대로 만들 수도 있다.

  • for 변수 in range(len(리스트)):

for 인덱스, 요소 in enumerate(리스트):

요소 뿐만 아니라 인덱스로 함께 출력 가능
시작 인덱스를 지정할 수도 있다.

  • for 인덱스, 요소 in enumerate(리스트, start=숫자):

while 변수 < len(리스트):

리스트의 인덱스는 0부터 시작하고 마지막 인덱스는 리스트 길이보다 1이 작으므로 <를 사용한다.

리스트의 가장 작은 수, 가장 큰 수, 합계 구하기

  • min(리스트)
  • max(리스트)
  • sum(리스트)

리스트 표현식(list comprehension)

리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 것
식으로 지정해서 생성된 것을 리스트로 잡아둔다는 의미

  • [식 for 변수 in 리스트]
  • list(식 for 변수 in 리스트)

뒤에서 앞으로 읽으면 간단하다.
리스트의 요소를 변수로 하나씩 꺼내오고, 최종적으로 식을 이용하여 리스트 생성
둘 중에 성능은 대괄호 방식이 더 좋다.

  • [식 for 변수 in 리스트 if 조건식]
  • list(식 for 변수 in 리스트 if 조건식)

for 반복문과 if 조건문을 여러 번 사용할 수도 있다.

a = [i * j for j in range(2, 10)
           for i in range(1, 10)]

처리 순서는 뒤에서 앞으로 순이다.

리스트에 map 사용하기

map은 리스트의 요소를 지정된 함수로 처리해주는 함수
원본 리스트를 변경하지 않고 새 리스트를 생성한다.

  • list(map(함수, 리스트))
  • tuple(map(함수, 튜플))

map에는 리스트 뿐만 아니라 모든 반복 가능한 객체(이터레이터)를 넣을 수 있다.

list(map(int, [1.2, 2.5, 3.7, 4.6]))
list(map(str, range(10)))
list(map(int, input().split())

map 객체 상태로는 안에 들어있는 값을 볼 수 없으므로 list를 사용해서 리스트로 출력한다.
map 객체는 이터레이터라서 변수 여러 개에 저장하는 언패킹이 가능하다.

튜플 응용하기

튜플은 불변이기 때문에, 내용을 변경하는 메서드는 사용할 수 없고, 요소의 정보를 구하는 메서드만 사용 가능하다.

모든 방법이 리스트와 거의 동일하나, 아래의 차이점이 존재한다.

  • tuple(식 for 변수 in 리스트 if 조건식)

()안에 표현식을 넣으면 튜플이 아니라 제너레이터 표현식이 된다.

profile
Win or Learn

0개의 댓글