본문 바로가기
PROGRAMMING/PYTHON

[Python] 리스트 관련 함수

by 안녕나는현서 2022. 1. 10.
728x90

리스트

  • mutable, ordered, iterable

 

[값 추가]

cafe = ['starbucks', 'tomntoms', 'hollys']
  • .append(x) : 리스트에 값 추가, 가장 마지막에 추가됨
cafe.append('banapresso')         # ['starbucks', 'tomntoms', 'hollys', 'banapresso']
  • .extend(iterable) : 리스트에 iterable 값을 붙임
cafe.extend(['wcafe', '빽다방'])  # ['starbucks', 'tomntoms', 'hollys', 'wcafe', '빽다방']
cafe.extend('ediya')             # ['starbucks', 'tomntoms', 'hollys', 'e', 'd', 'i', 'y', 'a']
  • .insert(i ,x) : 정해진 위치 i에 값을 추가
cafe.insert(0, 'start')          # ['start', 'starbucks', 'tomntoms', 'hollys']
cafe.insert(len(cafe), 'end')    # ['start', 'starbucks', 'tomntoms', 'hollys', 'end']
# 리스트의 길이를 넘어서는 인덱스는 마지막에 아이템 추가
cafe.insert(999, '!')            # ['start', 'starbucks', 'tomntoms', 'hollys', 'end', '!']

 

[값 삭제]

  • .remove(x) : 리스트에서 x인 값 삭제, 값이 없으면 오류
numbers = [1, 2, 3, 1, 2]
numbers.remove(1)
numbers       # [2, 3, 1, 2]
  • .pop(i) : 정해진 위치 i에 있는 값 삭제하고 그 항목 반환, i가 지정되지 않으면 마지막 항목을 삭제하고 되돌려줌
numbers = [1, 2, 3, 4, 5, 6]
numbers.pop(0)    # 1
numbers           # [2, 3, 4, 5, 6]
  • .clear() : 리스트의 모든 항목 삭제
numbers = [1, 2, 3, 4, 5, 6]
numbers.clear()
numbers           # []

 

[탐색 및 정렬]

  • .index(x) : x값의 인덱스 값을 반환, 찾는 값이 없으면 오류 반환
a = [1, 2, 3, 4, 5]
a.index(3)    # 2
  • .count(x) : x의 개수를 반환
a = [1, 2, 5, 1, 5, 1]
a.count(1)    # 3
  • .sort() : 정렬시킴, 원본 리스트를 변형시키고 None을 반환
    sorted(list)는 원본 리스트 변형시키지 않고 값을 반환
import random
lotto = random.sample(range(1, 46), 6)  # [9, 39, 4, 37, 3, 36]
print(lotto, lotto.sort())              # [3, 4, 9, 36, 37, 39] None
lotto.sort(reverse = True)              # [39, 37, 36, 9, 4, 3]
  • .reverse() : 반대로 뒤집기, 원본 변형
    reversed(list)는 원본 변환x
classroom = ['Tom', 'David', 'Justin']
classroom.reverse()                     # ['Justin', 'David', 'Tom']

 

 

[리스트의 복사 방법 - 얕은 복사, shallow copy]

original_list = [1, 2, 3]
copy_list = original_list

copy_list[0] = 5
print(original_list)   # [5, 2, 3]
print(copy_list)       # [5, 2, 3]
  • 위와 같이 복사를 진행하면 같은 리스트를 공유(참조)하고 있기 때문에, 한 리스트에서 값을 바꾸면 두 개의 리스트 모두 변화함 -> 따라서 다음과 같은 방법 사용
  • slice 연산자 사용
a = [1, 2, 3]
b = a[:]

b[0] = 5

print(a)   # [1, 2, 3]
print(b)   # [5, 2, 3]
  • list() 사용
a = [1, 2, 3]
b = list(a)

b[0] = 5

print(a)   # [1, 2, 3]
print(b)   # [5, 2, 3]

 

[리스트의 복사 방법 - 깊은 복사, deep copy]

a = [1, 2, [1, 2]]
b = a[:]

b[2][0] = 5

print(a)   # [1, 2, [5, 2]]
print(b)   # [1, 2, [5, 2]]
  • 얕은 복사에서는 위와 같은 2차원 리스트에서 값이 같이 변하게 됨
  • 만일 중첩된 상황에서 복사를 하고 싶다면, 깊은 복사를 해서 내부에 있는 모든 객체까지 복사할 수 있음
import copy

a = [1, 2, [1, 2]]
b = copy.deepcopy(a)

b[2][0] = 3

print(a)   # [1, 2, [1, 2]]
print(b)   # [1, 2, [3, 2]]

 

[List Comprehension]

  • 표현식과 제어문을 통해 리스트를 생성
  • 여러 줄의 코드를 한 줄로 줄일 수 있음
  • 반복문, 제어문이 중첩될 경우에 사용하면 가독성이 저하될 수 있음 (자주 사용x)
# List Comprehension
numbers = range(1, 11)
cubic_list = [number**3 for number in numbers]
print(cubic_list)     # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

# List Comprehension + 조건문
even_list = [number for number in range(1, 11) if not number%2]
print(even_list)      # [2, 4, 6, 8, 10]

 

[iterable 데이터 구조에 적용 가능한 Built-in Function]

  • map(function, iterable)
    • 순회가능한 데이터 구조의 모든 요소에 function적용한 뒤 결과를 돌려줌
    • return은 map_object 형태
numbers = [1, 2, 3]
new_numbers = ''.join(map(str, numbers))
print(new_numbers)   # 123

numbers = ['1', '2', '3']
new_numbers = list(map(int, numbers))
print(new_numbers)   # [1, 2, 3]

def cube(n):
    return n ** 3
    
numbers = [1, 2, 3]
new_numbers = list(map(cube, numbers))
print(new_numbers)   # [1, 8, 27]
  • filter(function, iterable)
    • iterable에서 function의 반환 결과가 True인 것들만 구성하여 반환
    • return은 filter_object 형태
def odd(n):
    return n % 2
    
numbers = [1, 2, 3]
new_numbers = list(filter(odd, numbers))
print(new_numbers)     # [1, 3]
  • zip(*iterable)
    • 복수의 iterable 객체를 모아줌
    • return은 zip_object 형태
girls = ['jane', 'ashley', 'mary']
boys = ['justin', 'eric', 'david']

pair = list(zip(girls, boys))
print(pair)     # [('jane', 'justin'), ('ashley', 'eric'), ('mary', 'david')]

 

728x90

'PROGRAMMING > PYTHON' 카테고리의 다른 글

[Python] heapq 모듈 사용법  (0) 2022.01.11
[Python] 세트, 딕셔너리 관련 함수  (0) 2022.01.10
[Python] 문자열 관련 함수  (0) 2022.01.10
[Python] 2차원 배열, 딕셔너리 정렬  (0) 2021.10.08
[Python] 진수 변환  (0) 2021.10.03

댓글