본문 바로가기

PYTHON

List

여러개의 값을 담을 수 있는 변수이다.

대괄호[]로 구분하며, 리스트 함수는 글자를 하나하나 분리한다.

list1 = [1,2,3,4,5]

m=list('good')
print(m) # ['g', 'o', 'o', 'd']

list의 값을 읽어올 때에는

  • 첫번째 값 list1[0]
  • 두번째 값 list1[1]
  • 뒤에서 첫번째 값 list1[-1]
  • 뒤에서 두번째 값 list1[-2]
  • 리스트에 들어있는 값 보다 큰 값을 읽어오려고 하면 err
  • 위의 list1에서 list1[5] 또는 list1[-6]은 err 

리스트를 만들 때에는

  • li=[] : 대괄호를 사용하여 빈 리스트를 만든다.
  • li=list() : 소괄호를 사용하되, 앞에 list임을 명시한다.
# 리스트 만들기
a = ['a', 'b','c']
b = list('abc')

print(a) # ['a', 'b','c']
print(b) # ['a', 'b','c']

# 리스트 인덱스
li = ['a', 'b','c']

print(li[0]) # a
print(li[1]) # b
print(li[2]) # c

li[2] ='d' # 리스트 값 변경 가능

print(li) # ['a', 'b', 'd']

# 값으로 항목 위치 찾기
li = ['a','b','c','d','e']

print(li.index('c')) # 리스트 li 에서 'c'의 위치 찾기 # 2

 

리스트 활용

리스트에 새로운 값을 추가할 때

# append를 이용
li = ['a','b','c','d','e']
li.append('f') # 리스트의 맨 끝에 추가하기

print(li) # ['a', 'b', 'c', 'd', 'e', 'f']

# 뒤에 새로운 리스트를 더하기
list1=[1,2,3]
list2=list1+[4] # list1은 그대로 두고, 새로운 리스트를 만들어 낸다.

print(list2) # [1,2,3,4]

# insert를 이용
li = ['a','b','c','d','e']
li.insert(0,'aa') # 원하는 위치에 추가하기

print(li) # ['aa', 'a', 'b', 'c', 'd', 'e']

# extend를 이용
# list.extend( [value1, value2] ) : 리스트 뒤에 값을 추가한다.
li = ['a','b','c','d','e']
li.extend( ['f', 'g'] )

print(li) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']

 

리스에서 값을 지울 때

# remove를 이용(특정 값을 지우기)
# list1.remove(40)을 하면 리스트에 40이라는 값이 있을 경우 삭제한다.
# 여러개의 값이 있는 경우 가장 앞에 있는 하나만 지워진다.
li = ['aa','a','b','c','d','e']
li.remove('aa') # 값으로 항목 삭제

print(li) # ['a', 'b', 'c', 'd', 'e']

# del을 이용(특정 위치의 값을 지우기)
# del list1[10] 리스트의 10번째 값을 지운다.
li = ['a','b','c','d','e']
del li[2] # 인덱스로 삭제하기

print(li) # ['a', 'b', 'd', 'e']

 

리스트에 값이 들어있는지 확인할 때

# in연산을 이용
# 12라는 값이 리스트에 들어있는지 확인하는 코드
list1=[1,2,3]
n=12
if n in list1:
  print('{}가 리스트에 있다.'.format(n))
  
li = ['a','b','c','d','e']
print('b' in li) # 'b'가 리스트 li에 있나요? # True

 

리스트의 전체 항목 개수 세기

li = ['a','b','c','d','e']
print(len(li)) # 5

 

리스트의 특정 항목 개수 세기

li = ['a','b','c','d','e']
print(li.count('a')) # 리스트 li에서 'a'가 몇 개인가? # 1

 

합 / 최대값 / 최소값

num = [1, 2, 3, 4, 5, 9, 8, 7, 6, 10]

print(sum(num)) # 합계 # 55
print(max(num)) # 최대값 # 10
print(min(num)) # 최소값 # 1

 

정렬 하기

  • sort() : 리스트 자체를 내부적으로 오름차순으로 정렬한다.
  • li.sort(reverse=True) : 내림차순으로 정렬한다.
  • sorted : 리스트의 정렬된 복사본을 반환한다.
# sort() 오름차순 정렬
num = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
num.sort()
print(num) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# sort(reverse=True) 내림차순 정렬
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num.sort(reverse=True)
print(num) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# reverse() 역순 만들기
num = [1,2,3,4,5,6,7,8,9,10]
num.reverse()
print(num) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# sorted() 오름차순 정렬된 복사본
list1 = [2,4,9,3,6]
print(list1) # [2, 4, 9, 3, 6]
list2 = sorted(list1)
print(list2) # [2, 3, 4, 6, 9]
print(list1) # [2, 4, 9, 3, 6] # 원본은 그대로 있다.

 

리스트와 문자열

리스트와 문자열은 유사하여 서로 변환이 가능하다.

  • list = str.split( ) : 문자열에서 리스트로
  • " ".join( list ) : 리스트에서 문자열로

문자 입력받아 공백 기준으로 자르기

li = input('문자 입력: ').split() # 공백을 기준으로 잘라서 리스트로 만든다.
print(li)

문자 입력: aa bb cc
['aa', 'bb', 'cc']

 

문자 입력받아 전체 자르기

li = list(input('문자 입력: ')) # 문자 하나하나 잘라서 리스트로 만든다.
print(li)

문자 입력: aabbcc
['a', 'a', 'b', 'b', 'c', 'c']

 

숫자 입려받기

숫자 하나씩 입력받기

li = []
li.append(int(input('숫자 입력: ')))
li.append(int(input('숫자 입력: ')))
li.append(int(input('숫자 입력: ')))
print(li) # [1, 2, 3]

 

숫자 여러 개 입력받기

li = list(map(int,input('숫자 입력: ').split()))
print(li)

숫자 입력: 1 2 3
[1, 2, 3]

 

숫자 활용

합 / 평균

num = list(map(int, input('숫자 입력: ').split()))
print('합', sum(num))
print('평균', sum(num)/len(num))

숫자 입력: 65 23 76 99 12
합 275
평균 55.0

 

최대값 / 최소값

num = list(map(int, input('숫자 입력: ').split()))
print('최대값:', max(num))
print('최소값:', min(num))

숫자 입력: 99 10 25 60 30
최대값: 99
최소값: 10

# 위 아래 값은 같다.

num = list(map(int, input('숫자 입력: ').split()))
num.sort() # 정렬
print('최대값:', num[len(num)-1]) # 정렬되었을 때 가장 끝에 있는 값이 최대값
print('최소값:', num[0]) # 정렬되었을 때 맨 앞에 있는 값이 최소값

숫자 입력: 99 10 25 60 30
최대값: 99
최소값: 10

 

중간값

num = list(map(int, input('숫자 입력: ').split()))
num.sort() # 정렬
print(num)
print('중간값:', num[len(num)//2]) # 정렬되었을 때 전체 개수 나누기 2

숫자 입력: 99 10 25 60 30
[10, 25, 30, 60, 99]
중간값: 30

 

Slice

리스트나 문자열에서 값을 여러개 가져오는 기능이다.

slice를 하면 해당하는 부분의 리스트나 문자열을 새로 만들어 준다.

  • list[ 2: ] : 2번째부터 끝까지 반환
  • list[ : 2 ] : 처음부터 2번째 까지 반환
  • list[ : ] : 처음부터 끝까지 전부 반환
text = "hello world"
text = text[ 1:5 ]
print(text) # ello

list = [ 0, 1, 2, 3, 4, 5 ]
list = list[ 1:3 ]
print(list) # [1, 2]

 

Slice의 step

  • slice한 값의 범위에서 step 값을 주어 그 값만큼 건너뛰어 가져오는 기능
  • list[ 시작값:끝값:step ]
list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list[2:8:2]
plint(list) # [3, 5, 7]

list1 = list(range(20)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
# reverse_list가 17, 13, 9, 5의 값을 가지도록 list1을 slice한다.
reverse_list = list1[17:4:-4]

print(reverse_list) # [17, 13, 9, 5]

 

Slice로 리스트 수정하기

 

numbers = list(range(10)) # [0,1,2,3,4,5,6,7,8,9]

del numbers[0]
print(numbers) # [1,2,3,4,5,6,7,8,9]

del numbers[:5]
print(numbers) # [6,7,8,9]

numbers[1:3] = [77,88]
print(numbers) # [6,77,88,9]

numbers[1:3] = [77,88,99] # 자릿수 상관없이 넣을 수 있다.
print(numbers) # [6,77,88,99,9]

numbers[1:4] = [8]
print(numbers) # [6,8,9]

 

리스트와 for문
# for 문으로 리스트에 값 추가
li = []
for i in range(5):
 li.append(int(input('숫자 입력:')))
print(li)
숫자 입력:1
숫자 입력:2
숫자 입력:3
숫자 입력:4
숫자 입력:5
[1, 2, 3, 4, 5]

# for 문으로 리스트의 값 출력
li = [1,2,3,4,5]
for i in range(len(li)): 
 print(li[i]) # 리스트의 인덱스로 접근
1
2
3
4
5

li = [1,2,3,4,5]
for i in li: # 리스트에 있는 항목으로 접근
 print(i, end=' ')
1 2 3 4 5

 

리스트와 if문
# 리스트의 항목 중 짝수출력 하기
li = [1,2,3,4,5,6,7,8,9,10]
for i in range(len(li)): 
 if li[i]%2==0: # 리스트의 인덱스로 접근
 print(li[i]) 
2
4
6
8
10

li = [1,2,3,4,5,6,7,8,9,10]
for i in li: # 리스트에 있는 항목으로 접근
 if i%2==0:
 print(i, end=' ')
2 4 6 8 10

 

리스트와 분리하기
# 문자열를 입력받아서 대문자 리스트, 소문자 리스트 만들기
li = list(input('문자 입력:'))
up = [] # 대문자 리스트
low = [] # 소문자 리스트

for i in li:
 if i.isupper(): # 대문자인 경우
   up.append(i) # up 리스트에 추가
 elif i.islower(): # 소문자인 경우
   low.append(i) # low 리스트에 추가
 print(up)
 print(low)
 
문자 입력:asdfAVVBBDds
['A', 'V', 'V', 'B', 'B', 'D']
['a', 's', 'd', 'f', 'd', 's']