본문 바로가기

프로그래밍/python

리스트(list) 자료형

이 글은 『이것이 취업을 위한 코딩 테스트다 with 파이썬』 책과 <<프로그래밍 기초 in Python>> 코드잇 강의를
참고해 적었음을 말씀드립니다.

 

여러 개의 데이터를 연속적으로 담아 처리할 때 사용하기 좋은 배열방식이다.

인덱스는 0부터 시작하며 [] 안에 넣어 초기화하고 쉼표(,)로 원소를 구분한다.

지원 메소드 : append(), remove() 등

 

 

리스트 자료형

# 리스트 선언
a = [1, 2, 3, 4, 5, 6, 7]
print(a)

# 인덱스 3 접근 == 4번째 원소 접근
print("인덱스 3 : ", a[3])

# 빈 리스크 선언법1.
a = list()
print("빈 리스크 : ", a)

# 빈 리스크 선언법2.
b = []
print("빈 리스크2 : ", a)
 

[1, 2, 3, 4, 5, 6, 7]
인덱스 3 :  4   
빈 리스크 :  [] 
빈 리스크2 :  []

 

 

# 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * 10
print("초기화 : ", a)

초기화 :  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 

 

 

리스트의 인덱싱과 슬라이싱

# 인덱싱 : 특정 원소에 접근, -1은 그 마지막 원소가 출력된다
a = [ 1, 2, 3, 4, 5]
print("a[-1] : ", a[-1])

# 인덱싱 값 변경
a[-1] = 7
print("변경된 a[-1]의 list값 : ", a)

a[-1] :  5
변경된 a[-1]의 list값 :  [1, 2, 3, 4, 7]

 

# 슬라이싱 : 연속된 위치를 갖는 원소를 가져올 때 사용한다
# 대괄호 안에 콜론(:)을 넣어 시작 인덱스와 끝 인덱스-1을 설정한다
a = [ 1, 2, 3, 4, 5, 6, 7 ]
print(a[ 0 : 3 ])  # 첫번째 원소부터 3번째 원소까지 출력

[1, 2, 3]

 

 

 

리스트 컴프리헨션

# 리스트 컴프리헨션 : 리스트를 초기화하는 방법 중 하나로 대괄호([ ]) 안에 조건문과 반복문을 넣는 방식이다.
# 여기서 range의 start는 1부터 시작하며 end는 n-1이다
# Ex1. 0부터 19까지의 수 중에서 짝수만 포함하는 리스트
array = [ i for i in range(20) if i % 2 == 0 ]
print(array)

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

# 위 소스코드를 일반적인 소스코드로 작성시 다음과 같다
array = []
for i in range(20):
    if i % 2 == 0:
        array.append(i)

print(array)        

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

 

# Ex2. 1부터 9까지의 수의 제곱 값을 포함하는 리스트
array = [ i * i for i in range(1, 10)]
print(array)

[1, 4, 9, 16, 25, 36, 49, 64, 81]

 

 

# Ex3. N * M 크기의 2차원 리스트 초기화
# 언더바(_)는 반복을 위한 변수를 무시하기 위해 사용된다
n = 3
m = 4
array = [ [0] * m for _ in range(n)]
print(array)

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

 

 

 

리스트 관련 메서드

 

『이것이 취업을 위한 코딩 테스트다 with 파이썬』 p.424

 
 
a = [ 1, 4, 2, 3, 5, 3]
print("초기 값 : ", a)

# 리스트에 원소 삽입
a.append(6)
print("6 삽입 : ", a)

# 특정 인덱스에 데이터 추가
a.insert(2, 7)
print("인덱스 2에 7추가 : ", a)

초기 값 :  [1, 4, 2, 3, 5, 3]
6 삽입 :  [1, 4, 2, 3, 5, 3, 6]
인덱스 2에 7추가 :  [1, 4, 7, 2, 3, 5, 3, 6]

 

 

# 오름차순 정렬
a.sort()
print("오름차순 정렬 : ", a)

# 내림차순 정렬
a.sort(reverse=True)
print("내림차순 정렬 : ", a)

오름차순 정렬 :  [1, 2, 3, 3, 4, 5, 6, 7]
내림차순 정렬 :  [7, 6, 5, 4, 3, 3, 2, 1]

 

# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기 : ", a)

# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 수 세기 : ", a.count(3))

# 특정 값 데이터 1개 삭제
a.remove(3)
print("값이 3인 데이터 삭제 : ", a)  # 원소 1개만 사라진다
원소 뒤집기 :  [1, 2, 3, 3, 4, 5, 6, 7]
값이 3인 데이터 수 세기 :  2
값이 3인 데이터 삭제 :  [1, 2, 3, 4, 5, 6, 7] 

 

#  특정 값 데이터 1개 전체 삭제
a = [ 1, 2, 3, 3, 4, 5, 5, 5 ]
remove_set = [ 3, 5 ]

result = [i for i in a if i not in remove_set]
print(result)

[1, 2, 4]

 

 

 

예제)

# 리스트(list)
numbers = [2, 3, 5, 7, 11, 13]
names = ["윤수", "혜린", "태호", "영호"]

# 인덱싱(indexing)
print(names[0])
num_1 = numbers[1]
num_3 = numbers[3]
print(num_1+num_3)
print(numbers[-6]) # -1부터 역순으로도 가능

# 리스트 슬라이싱(list slicing)
print(numbers[0:4]) #index 0~3
print(numbers[2:])  #index 2~ 마지막
print(numbers[:3]) #index 처음 ~2

new_list = numbers[:3] # [2, 3, 5]
print(new_list[2])

numbers[0] = 7  # 인덱스 0 에 정수 7을 넣어줌 2->7 교체됨
print(numbers)

numbers[0] = numbers[0] + numbers[1]
print(numbers)



# 리스트 함수
numbers = []
print(len(numbers))
numbers.append(5) # 가장 오른쪽에 새로운 값을 추가
numbers.append(3)
print(numbers)
print(len(numbers))

numbers = [2, 3, 5, 7, 11]
del numbers[3]  # del은 삭제 3번째 위치의 값을 삭제
print(numbers)  # [2, 3, 5, 11]
numbers.insert(1, 20)  # insert는 원하는 자리에 값을 추가
print(numbers)



# 리스트 정렬
# - sorted : 기존 리스트는 건드리지 앟고, 정렬된 새로운 리스트를 리턴
# - sort : 아무것도 리턴하지 않고, 기존 리스트를 정렬

numbers = [19, 13, 1, 5, 2, 11, 7, 17]

new_list = sorted(numbers, reverse=True)  # list 정렬 오름차순, reverse=True : 내림차순
print(new_list)
print(numbers)  # sorted는 기존의 list를 건들지 않음

numbers.sort() # numbers의 list 자체를 오름차순 정렬
print(numbers)
numbers.sort(reverse=True) # 내림차순 정렬
print(numbers)

# Ex1. greetings 리스트의 원소를 모두 출력하는 프로그램을 작성해 보세요.
print("Ex1.")
greetings = ["안녕", "니하오", "곤니찌와", "올라", "싸와디캅", "헬로", "봉주르"]
i = 0
while i < len(greetings):
    print(greetings[i])
    i += 1

# Ex2. 화씨 온도(°F)를 섭씨 온도(°C)로 바꾸어주는 프로그램을 만들라.
print("Ex2.")
def fahrenheit_to_celsius(fahrenheit):
    return (fahrenheit - 32) * 5 / 9


temperature_list = [40, 15, 32, 64, -4, 11]
print("화씨 온도 리스트: " + str(temperature_list))  # 화씨 온도 출력

i = 0
while i < len(temperature_list):
    temperature_list[i] = round(fahrenheit_to_celsius(temperature_list[i]), 1)
    i += 1
print("섭씨 온도 리스트: " + str(temperature_list))  # 섭씨 온도 출력



# Ex3.원화를 미국 달러($)로 하면 얼마일지,그리고 일본 엔화(¥)로 하면 얼마일지 계산하는 프로그램을 작성하시오.
# 원화(₩)에서 달러($)로 변환하는 함수 1달러 1000원
print("Ex3.")
def krw_to_usd(krw):
    return krw / 1000

# 달러($)에서 엔화(¥)로 변환하는 함수 1000엔 8달러 = 125엔 1달러
def usd_to_jpy(usd):
    return usd * 125


# 원화(₩)으로 각각 얼마인가요?
prices = [34000, 13000, 5000, 21000, 1000, 2000, 8000, 3000]
print("한국 화폐: " + str(prices))

# prices를 원화(₩)에서 달러($)로 변환하기
i = 0
while i < len(prices):
    prices[i] = krw_to_usd(prices[i])
    i += 1

# 달러($)로 각각 얼마인가요?
print("미국 화폐: " + str(prices))

# prices를 달러($)에서 엔화(¥)으로 변환하기
i = 0
while i < len(prices):
    prices[i] = usd_to_jpy(prices[i])
    i += 1

# 엔화(¥)으로 각각 얼마인가요?
print("일본 화폐: " + str(prices))

# Ex4. 리스트 함수 활용
print("Ex4.")
# 빈 리스트 만들기
numbers = []
print(numbers)

# numbers에 값들 추가
numbers.append(1)
numbers.append(7)
numbers.append(3)
numbers.append(6)
numbers.append(5)
numbers.append(2)
numbers.append(13)
numbers.append(14)
print(numbers)  # [1, 7, 3, 6, 5, 2, 13, 14]

# numbers에서 홀수 제거
i = 0
while i < len(numbers):
    if numbers[i] % 2 != 0:
        del numbers[i]    # 삭제가 될 경우 인덱스가 앞당겨지기에
    else:                 # 삭제가 안되는 짝수에만 +1을 한다
        i += 1
print(numbers)

# numbers의 인덱스 0 자리에 20이라는 값 삽입
numbers.insert(0, 20)  # 인덱스 0에 20 들어가고 나머지는 뒤로 밀려난다
print(numbers)

# numbers를 정렬해서 출력
numbers.sort()
print(numbers)

<result>

윤수
10
2
[2, 3, 5, 7]
[5, 7, 11, 13]
[2, 3, 5]
5
[7, 3, 5, 7, 11, 13]
[10, 3, 5, 7, 11, 13]
0
[5, 3]
2
[2, 3, 5, 11]
[2, 20, 3, 5, 11]
[19, 17, 13, 11, 7, 5, 2, 1]
[19, 13, 1, 5, 2, 11, 7, 17]
[1, 2, 5, 7, 11, 13, 17, 19]
[19, 17, 13, 11, 7, 5, 2, 1]
Ex1.
안녕
니하오
곤니찌와
올라
싸와디캅
헬로
봉주르
Ex2.
화씨 온도 리스트: [40, 15, 32, 64, -4, 11]
섭씨 온도 리스트: [4.4, -9.4, 0.0, 17.8, -20.0, -11.7]
Ex3.
한국 화폐: [34000, 13000, 5000, 21000, 1000, 2000, 8000, 3000]
미국 화폐: [34.0, 13.0, 5.0, 21.0, 1.0, 2.0, 8.0, 3.0]
일본 화폐: [4250.0, 1625.0, 625.0, 2625.0, 125.0, 250.0, 1000.0, 375.0]
Ex4.
[]
[1, 7, 3, 6, 5, 2, 13, 14]
[6, 2, 14]
[20, 6, 2, 14]
[2, 6, 14, 20]

 

[참고자료]
- 『이것이 취업을 위한 코딩 테스트다 with 파이썬』 나동빈. 한빛미디어
- <<프로그래밍 기초 in Python>> 코드잇

 

[파이썬 공부]

https://wikidocs.net/14

 

02-3 리스트 자료형

지금까지 우리는 숫자와 문자열에 대해서 알아보았다. 하지만 숫자와 문자열만으로 프로그래밍을 하기엔 부족한 점이 많다. 예를 들어 1부터 10까지의 숫자 중 홀수 모음인 1, ...

wikidocs.net

 

'프로그래밍 > python' 카테고리의 다른 글

for 반복문  (0) 2021.10.27
리스트(list) 활용 tip  (0) 2021.10.27
ex2. 제어문 실습과제  (0) 2021.10.24
제어문 예제 while if  (0) 2021.10.23
거스름돈 계산 프로그램  (0) 2021.10.23