리스트 다루기

eomeom·2023년 5월 3일

리스트 수정과 삭제

Q : 숫자 리스트 num과 1~5의 코드를 실행한 후 나온 결과가 아래와 같을 때, 다음 보기 중 1~5에 들어갈 코드로 적절하지 않은 것을 고르세요.

num = [2, 3, 5, 7 ,9, 11, 13, 17]

1. num[:-1] = "prime number"
2. num[5:6] = '23'
3. num[14:] = [57]
4. num[0] = [1]
5. print(num)
[1, 'r', 'i', 'm', 'e', '2', '3', 'n', 'u'. 'm', 'b', 'e', 'r', 17, 57]

답 : 4번

<실습 문제>
주어진 numbers 리스트를 다음 내용에 따라 수정 및 삭제하기.

numbers = [10, 24, 52, 6, 30, 15, 2, 19, 27, 22]
  1. numbers 리스트의 첫 번째 값을 40으로 교체합니다.
numbers[0] = 40

결과 : [40, 24, 52, 6, 30, 15, 2, 19, 27, 22]

  1. numbers 리스트의 여섯 번째 값을 'hello'으로 변경합니다.
numbers[5] = 'hello'

결과 : [40, 24, 52, 6, 30, 'hello', 2, 19, 27, 22]

  1. numbers 리스트의 2~3번 값을 슬라이싱하여 ['b', 'i', 'g'] 리스트를 입력합니다.
numbers[2:4] = 'big'

결과 : [40, 24, 'b', 'i', 'g', 30, 'hello', 2, 19, 27, 22]

  1. numbers 리스트에서 'b'부터 'hello'까지의 값을 공간과 함께 삭제합니다.
numbers[2:7] = []

결과 : [40, 24, 2, 19, 27, 22]

리스트 함수

append() : 리스트 맨 마지막 인덱스에 새로운 값을 추가

color = ['red', 'blue', 'green']
color.append('white’) # 리스트에 ‘white’ 추가

#결과 ['red', 'blue', 'green', 'white']

extend() : 값을 추가하는 것이 아닌 기존 리스트에 그대로 새로운 리스트를 합치는 기능

color = ['red', 'blue', 'green']
color.extend(['black', 'purple’]) # 리스트에 새로운 리스트 추가

#결과 ['red', 'blue', 'green', 'black', 'purple'

insert() : append() 함수와 달리 리스트의 특정 위치에 값을 추가

color = ['red', 'blue', 'green']
color.insert(0, 'orange')

#결과 ['orange', 'red', 'blue', 'green']

remove() : 리스트에 있는 특정 값을 지우는 기능

color = ['orange', 'red', 'blue', 'green']
color.remove('red')

#결과 ['orange', 'blue', 'green']

del [] : 특정 인덱스값을 삭제

color = [1, 2, 3, 4, 5]
del color[0]

pop() : 리스트의 마지막 데이터를 변환한 뒤 삭제

sort() : 리스트 요소를 오름차순으로 정렬

reverse() : 리스트의 순서를 반대로 전환 (내림차순)

index(x) : 리스트에서 x를 찾아 인텍스 값 반환

count(x) : 리스트에 있는 x갑 개수 반환

리스트 활용

주어진 리스트 mylist에서 길이가 3인 부분집합만 출력하는 코드를 작성하세요.

mylist = [[1, 2, 3], [4, 5, 6, 7], [8, 9, 10], [11, 12]]

for i in range(len(mylist)):
	if len(mylist[i]) == 3:
		print(mylist[i])

패킹과 언패킹

t = [1, 2, 3]
a, b, c = t
printf(t, a, b, c) #[1, 2, 3] 1 2 3

패킹 : 한 변수에 여러 개의 데이터를 할당하는 그 자체로 리스트 자체
언패킹 : 한 변수에 여러 개의 데이터가 들어있을 때 그것을 각각의 변수로 반환하는 방법

이차원 리스트


Q : 위의 표와 같은 이차원 리스트를 하나의 변수로 표현하기

kor_score = [49, 79, 20, 100, 80]
math_score = [43, 59, 85, 30, 90]
eng_score = [49, 79, 48, 60, 100]
midterm_score = [kor_score, math_score, eng_score]
print(midterm_score)

결과 : [[49, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]

리스트의 메모리 저장

a = 300
b = 300
>>> a is b
False
>>> a == b
True

==으로 비교하면 Ture인데, is로 비교하면 False가 나오는 이유
==은 값을 비교하는 연산이고, is는 메모리 주소를 비교하는 연산이기 때문입니다.
파이썬에서 -5~256까지의 정수값은 특정 메모리 주소에 저장하고 해당 숫자를 할당하려고 할 때 해당 변수는 그 숫자가 가진 메모리 주소로 연결합니다.

리스트 저장 구조의 특징

  1. 다양한 자료형이 하나의 리스트에 모두 들어갈 수 있습니다.
  2. 기존 변수들과 함께 리스트 안에 다른 리스트를 넣을 수도 있습니다.

<리스트의 저장 방식>

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

결과 : [5, 4, 3, 2, 1]
b와 a변수를 각각 다른 값으로 선언한 후 b에 a를 할당하고 b를 출력하면 a변수와 같은 값이 화면에 출력됩니다.

여기서 a만 정렬하고 b를 출력하게 된다면?

a.sort()
print(b)

결과 : [1, 2, 3, 4, 5]
b = a를 입력하는 순간 b에도 a 리스트의 메모리 주소가 저장되기 때문입니다.

<마무리 과제>
XOOXOXOXOX와 같은 OX퀴즈의 결과를 입력하고, 문제를 맞은 경우 그 문제의 점수는 그 문제까지의 연속된 O의 개수가 됩니다. 이와 같은 OX퀴즈 프로그램을 작성하세요.

answer = [ ]
answer[0:1] = input('')

total = 0
current = 1
now = 0

for i in range(len(answer)):
	if answer[now] == 'O':
		total += 1 * current
		current += 1
		now += 1
	elif answer[now] == 'X':
		total += 0
		now += 1
		current = 1
	
print(total)

0개의 댓글