Skip to content

List Comprehension

List : 목록, 값을 일렬로 늘어놓은 형태
리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 것

li = [i for i in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  • [식 for 변수 in 리스트 if 조건식]
    [i + 5 for i in range(10) if i % 2 == 0] # [5, 7, 9, 11, 13] 0부터 9까지 숫자 중 짝수+5로만 리스트 생성 
    
  • [식 for 변수1 in 리스트1 if 조건식1 for 변수2 in 리스트2 if 조건식 2 …]
    [i*j for j in range(2,10) for i in range(1,10)] #  2단부터 9단까지 구구단
    

list + map

  • list(map(함수, 리스트))
  • tuple(map(함수, 튜플))
a = list(map(str, range(10)))  # a = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int, a)) # a = [1, 2, 3, 4]
a = [1.2, 2.5, 3.7, 4.6]
for i in range(len(a)):
    a[i] = int(a[i])    # a = [1, 2, 3, 4]

input.split + map

  • map + input().split()
    a = map(int, input().split())  # 10 20 (입력)
    print(a) # <map object at 0x03DFB0D0>
    list(a) # [10, 20]
    
  • map이 반환하는 map 객체는 이터레이터이므로 변수 여러 개에 저장하는 언패킹(Unpacking) 가능
    a, b = map(int, input().split()) # 10 20 (입력)
    print(a) # 10
    print(b) # 20
    

요소 추가

  • append: 요소 하나 추가
  • extend: 리스트를 연결하여 확장
  • insert: 특정 인덱스에 요소 추가
a = [1,2,3,4,5]
a.append(500) # a = [1,2,3,4,5,500]
a.append([500,600]) # a= [1,2,3,4,5,[500,600]]
a.extend([500,600]) # a = [1,2,3,4,5,500,600]
a.insert(0,500) # a = [500,1,2,3,4,5]
a.insert(len(a), 500) # a= [1,2,3,4,5,500]
a.insert(1, [500,600]) # a = [1,[500,600],2,3,4,5]

요소 삭제

  • pop: 리스트의 마지막 요소를 삭제한 뒤 삭제한 요소 반환
  • remove: 특정 값을 찾아서 삭제
a = [1,2,3,4,5]
a.pop() # 5, a = [1,2,3,4]
a.pop(1) # 2, a= [1,3,4,5]
del a[1] # a = [1,3,4,5]
a.remove(3) # a = [1,2,4,5] 값이 여러개 일 경우에는, 처음 찾은 값 삭제

특정 값의 인덱스

  • index : 리스트에서 특정 값의 인덱스를 구함 (여러 개일 경우, 처음 찾은 값의 인덱스 반환)
    b = [10,20,30,15,20,40]
    b.index(20) # 1
    

특정 값의 개수

  • count: 리스트에서 특정 값의 개수
    b = [10,20,30,15,20,40]
    b.count(20) # 2
    

정렬 & 순서 뒤집기

  • reverse: 요소의 순서를 반대로 뒤집기
  • sort() / sort(reverse=False): 리스트의 값을 작은 순서대로 정렬 (오름차순)
  • sort(reverse=True): 리스트의 값을 큰 순서대로 정렬 (내림차순)
  • sort: 리스트 내용을 변경 vs sorted: 정렬된 새 리스트 생성
    a.reverse() # [5,4,3,2,1]
    b.sort() # [10,15,20,20,30,40]
    sorted(b) # [10,15,20,20,30,40]
    

리스트의 모든 요소 삭제

a.clear() # a = []
del a[:] # a= []

빈 리스트인지 확인하기

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

할당과 복사

  • 할당 : c와 d는 같은 객체이므로 변경 사항 공유
    c = d
    c is d # True
    
  • 복사 : c와 d는 다른 객체이므로 변경 사항을 공유하지 않음
    d = c.copy() # 요소 복사
    c is d  # False
    c == d  # True, 복사 했으므로 값은 같음.
    

인덱스와 요소를 함께 출력하기

  • for 인덱스, 요소 in enumerate(리스트):
  • while
for index, value in enumerate(c):
    print(index, value) 
for index, value in enumerate(c, 1): #인덱스를 1부터 시작
    print(index, value) 
i = 0
while i <= len(a):
    print(i, a[i])
    i+=1

가장 작은 수 구하기

small = a[0]
for i in a:
    if i < smallest: # 가장 큰 수는 부호 >으로
        smallest = i
a.sort()  # 가장 큰 수는 a.sort(reverse=True)
a[0]
min(a) 
max(a) 

요소 합계

x=0
for i in a:
    x += i
sum()

2차원 list

a = [[10,20], [30,40], [50,60]] # a[세로][가로]

2차원 요소 출력

for x,y in a:   # 10 20 
    print(x,y)  # 30 40
for i in a:
    for j in i:
        print(j, end = ' ')
    print() 
i=0
while i < len(a):
    x,y = a[i]
    print(x,y)
    i+=1

2차원 list 생성

a = [[0]*2 for i in range(3)]  # [[0,0], [0,0], [0, 0]]
a = [[0 for j in range(2)] for i in range(3)] # [[0,0], [0,0], [0, 0]]
a=[]
for i in range(10):
    a.append(0) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for i in range(3):
    line = []
    for i in range(2):
        line.append(0)
    a.append(line) # [[0,0], [0,0], [0, 0]]

톱니형 리스트

a = [3,1,3,2,5] # 가로 크기
b = [] # 빈 리스트 생성
for i in a: # 가로 크기를 저장한 리스트 반복
    line=[] # 안쪽 리스트로 사용할 빈 리스트 생성
    for j in range(i): # 리스트 a에 저장된 가로 크기만큼 반복
        line.append(0) 
    b.append(line) # 안쪽 리스트를 b 리스트에 추가
print(b)  # [[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]

2차원 리스트 정렬 sorted

  • sorted (반복가능한객체, key=정렬함수, reverse= True 또는 False)

2차원 리스트 할당과 복사

  • 할당 : a=b, b=a.copy()
  • 복사 : b = copy.deepcopy(a) 2차원 이상의 다차원 리스트는 복사할 때, copy 모듈의 deepcopy 함수 사용