본문 바로가기

프로그래밍/Python

[Python] 리스트(list)

리스트(list)

여러 개의 값을 하나의 변수로 관리하기 위한 기능

 

리스트 요소 개수를 조사하는 방법 : len() 함수

a = [1,2,3,4,5,6,7]
len(a)
#len(a)는 7

 

리스트는 데이터 계산을 한번에 실시할 수 있어 매우 편리

points = [88, 76, 67, 43, 79, 80, 91]
sum_v = 0
for i in points:
    sum_v+=i
    print(i, "점을 더한 합계는 ", sum_v)

ave = sum_v / len(points)
print("평균점은 ", ave, "점")

 

파이썬에는 리스트에 들어 있는 값의 합계를 한 번에 구할 수 있는 sum()이라는 함수가 마련

for 구문을 사용하지 않아도 리스트의 각각의 요소를 모두 더해서 합계를 구할 수 있음

points = [88, 76, 67, 43, 79, 80, 91]
sum_v = sum(points)
ave = sum_v / len(points)
print("합계점은 ", sum_v, "점")
print("평균점은 ", ave, "점")

 

리스트에 들어갈 수 있는 값은 수치 뿐만 아니라 문자열도 대입할 수 있음

#이름을 무작위로 표시하는 프로그램 예제
import random
name = ["박성진, 박제형, 강영현, 김원필, 윤도운"]
i = random.randint(0, len(name)-1) #무작위로 수치를 하나 고른다.
print(name[i])

random.randint(n, m) : n부터 m까지의 수치 중에서 무작위로 선택된 값을 구할 수 있음

 


for구문에서 인덱스 번호를 사용한 반복

for 구문과 리스트를 조합해서 사용한 구문에서는 요소의 값만 구할 수 있지만, enumerate() 함수를 사용하면 요소의 값뿐만 아니라 (인덱스 번호, 요소의 값) 튜플을 구할 수 있음

fruits = ["Apple", "Orange", "Banana"]
for i,v in enumerate(fruits):
    print(i, v)
print(list(enumerate(fruits)))


리스트에 요소 추가 : append()

이미 만들어진 리스트에 새로운 값을 추가할 때 사용

append()를 사용하면 데이터를 리스트의 마지막 요소 뒤에 추가 할 수 있음

#리스트에 요소 추가 append()
num = [1, 2, 3]
num.append(4) #append()로 값 추가
num.append(5)
print(num) #결과 : [1, 2, 3, 4, 5]
#국어 시험 점수 목록
points = [80, 40, 23, 14, 29, 58]

#30점 이하의 데이터만을 선택해서 낮은 점수 리스트에 추가
lowscore = [] #빈 리스트
for p in points:
    if p < 30:
        lowscore.append(p)
print(lowscore) #결과 : [23, 14, 29]

주의) print(b.append(5)) #None이라는 값이 나온다

append 함수는 반환 타입이 없다. 따라서 따로 print(b)해줘야 함

 


리스트에 요소 추가 : insert() 함수

리스트의 중간에 요소 삽입 가능 (append()는 맨끝에 추가되었음)

문법 : 리스트명.insert(삽입할 위치, 삽입할 요소)

a = [1,2,4,5]
a.insert(2,3)
print(a) #결과 : [1,2,3,4,5]

두 개의 리스트를 결합하는 방법 : +연산자와 extend() 함수

서로 다른 리스트를 결합하려면 +연산자를 사용하거나 extend() 함수 사용

 

+연산자와 extend() 함수의 차이점

+ 연산자 : 원본 리스트에 어떠한 변화가 없음 -> 비파괴적

extend() 함수 : 원본 리스트에 직접적으로 영향을 줌 -> 파괴적

 

(+연산자를 이용해서 원본을 파괴하려면 c = c+d 이런식으로 해야 원본이 바뀜.)

주의) print(c+d)는 가능한데 print(c.extend(d)) 는 None나옴


리스트 요소 슬라이스

리스트의 일부분을 구하는 기능을 슬라이스라고 함

  • 끝이라고 쓰여있는 부분에는 (리스트의 마지막 인덱스 번호 + 1) 한 값을 지정해야 함
  • 0번과 마지막 요소의 인덱스는 생략 가능 ex) a[ : 3] == a[0 : 3]
  • 인덱스 값에 음의 값을 지정하면 마지막에서부터 n개의 값을 구할 수 있음

[a:b:step] : a부터 b-1인덱스에 해당하는 요소 중 step번째에 등장하는 데이터 값 

#리스트 요소 슬라이스
b = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(b[2:8:2]) #인덱스 2~7까지 중에 2번째 값들
#결과 : [3, 5, 7]

print(b[::3])#처음~끝까지 3번째에 등장하는 데이터 값 출력
#결과 : [1, 4, 7]

리스트 요소 삭제

리스트 요소를 제거하는 방법

  • 인덱스로 제거 : del 키워드 , pop()
  • 값으로 제거 : remove()
  • 모두 제거 : clear()

인덱스로 제거 : del 키워드

리스트의 특정 인덱스에 있는 요소 제거

del 리스트명 [인덱스]

주의) print(del c[2]) #이렇게 하면 error뜬다. invalid syntax

#del키워드
num = [0, 1, 2, 3, 4]
del num[2]
print(num) #결과 : [0, 1, 3, 4]

num = [0, 1, 2, 3, 4]
del num[2:4]
print(num) #결과 : [0, 1, 4]

 

인덱스로 제거 : pop() 함수

매개 변수를 입력하지 않으면 마지막 요소를 제거

리스트명.pop(인덱스)

주의) print(c.pop(0))

        pop print에 쓸 수는 있는데, 0번째 요소가 제거된 리스트가 나오는게 아니라 그냥 0번째 요소가 출력됨

#pop() 함수
num = [0, 1, 2, 3, 4]
num.pop(1) #인덱스1에 있는 요소를 삭제
print(num) #결과 : [0, 2, 3, 4]

num = [0, 2, 3, 4]
num.pop() #아무것도 안쓰면 자동으로 마지막 요소가 삭제됨
print(num) #결과 : [0, 2, 3]

 

값으로 제거 : remove()

리스트 안에 있는 값 x를 삭제 (동일한 값이 여러 개 있다면, 가장 앞에 위치한 값부터 제거)

리스트.remove(x)

주의) print(c.remove(4)) #remove print에 쓰지 못함, 반환값이 없기 때문에

#remove
num = [0, 1, 2, 3, 4, 2, 5]
num.remove(2)
print(num) #결과 : [0, 1, 3, 4, 2, 5]

 

모두 제거 : clear()

리스트의 모든 요소를 삭제

리스트.clear()

주의) print(c.clear()) #None나옴, 반환안됨

#clear
num = [0, 1, 2, 3, 4, 2, 5]
num.clear()
print(num) #결과 : []