예) 1부터 9까지의 정수 데이터를 담는 리스트 만든 뒤, 특정한 인덱스의 원소에 접근하여 출력
<입력>
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a)
# 인덱스 4, 즉 다섯번째 원소에 접근
print(a[4])
# 빈 리스트 선언 방법 1
a = list()
print(a)
# 빈 리스트 선언 방법 2
a = []
print(a)
<출력>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
5
[]
[]
# 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
<입력>
n = 10
a = [0] * n
print(a)
<출력>
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
<입력>
# 뒤에서 첫번째 원소 출력
print(a[-1])
# 뒤에서 세번째 원소 출력
print(a[-3])
# 네번째 원소값 변경
a[3] = 7
print(a)
<출력>
9
7
[1, 2, 3, 7, 5, 6, 7, 8, 9]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
<입력>
# 두번째 원소부터 네번째 원소까지
print(a[1:4])
<출력>
[2, 3, 4]
※ 리스트의 인덱스는 0부터 출발하기 때문에 두번째 원소의 인덱스는 1이 됨
끝 인덱스의 경우 1을 뺀 값의 인덱스까지 처리됨
# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
<입력>
array = [i for i in range(20) if i % 2 == 1]
print(array)
<출력>
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
※ 위 코드를 일반적인 소스코드 작성할 경우
<입력>
array = []
for i in range(20):
if i % 2 == 1:
array.append(i)
print(array)
리스트 컴프리헨션을 이용했을 때 소스코드가 훨씬 짧고 간결하다.
# 1부터 9까지의 수의 제곱 값을 포함하는 리스트
<입력>
array = [i * i for i in range(1, 10)]
print(array)
<출력>
[1, 4, 9, 16, 25, 36, 49, 64, 81]
2차원 리스트를 초기화할 때 매우 효과적으로 사용될 수 있음
# 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]]
# 1 ~ 9짜지의 자연수를 더할 때
summary = 0
for i in range(1, 10):
summary += i
print(summary)
# 단순히 "Hello World "를 5번 출력할 때
for _ in range(5):
print("Hello World ")
✓ 특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야함
# N * M 크기의 2차원 리스트 초기화(잘못된 방법)
n = 3
m = 4
<입력>
array = [[0] * m] * n
print(array)
array[1][1] = 5
print(array)
<출력>
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]]
# 리스트를 선언합니다.
array = ["사과", "자두", "초콜릿", "바나나", "체리"]
output = [fruit for fruit in array if fruit != "초콜릿"]
# 출력합니다.
print(output)
<입력>
a = [1, 3, 5]
print("기본 리스트: ", a)
# 리스트에 원소 삽입
a.append(2)
print("삽입: ", a)
# 오름차순 정렬
a.sort()
print("오름차순 정렬: ", a)
# 내림차순 정렬
a.sort(reverse=True)
print("내림차순 정렬: ", a)
# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기: ", a)
# 특정 인덱스에 데이터 추가
a.insert(2, 3)
print("인덱스 2에 3 추가: ", a)
# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 개수: ", a.count(3))
# 특정 값 데이터 삭제
a.remove(1)
print("값이 1인 데이터 삭제: ", a)
<출력>
기본 리스트: [1, 3, 5]
삽입: [1, 3, 5, 2]
오름차순 정렬: [1, 2, 3, 5]
내림차순 정렬: [5, 3, 2, 1]
원소 뒤집기: [1, 2, 3, 5]
인덱스 2에 3 추가: [1, 2, 3, 3, 5]
값이 3인 데이터 개수: 2
값이 1인 데이터 삭제: [2, 3, 3, 5]
✓ 이 중 insert(), append(), remove()를 특히 더 눈여겨 두기!!
insert()함수를 사용할 때 원소의 개수가 N개면 시간복잡도는 O(N)임
append()함수는 O(1)에 수행되는 데에 반해 insert()함수는 동작이 느림(중간에 원소를 삽입한 뒤에 리스트의 원소 위치를 조정해줘야 하기 때문)
∴ insert()함수를 남발하면 '시간초과'로 테스트를 통과하지 못할 수도 있음
remove()의 시간복잡도는 insert()함수와 마찬가지(insert()함수와 마찬가지로 리스트에서 중간에 있는 원소를 삭제한 뒤 리스트의 원소 위치를 조정해주어야 하기 때문)
☑ 특정한 값의 원소를 모두 제거하려면?
→ 다른 프로그래밍 언어에서는 remove_all()과 같은 함수로 간단하게 특정한 값을 가지는 모든 원소를 제거
→ 파이썬의 경우 이러한 함수를 기본적으로 제공해주지 않으므로 다음과 같은 방법을 이용하면 좋음
a = [1, 2, 3, 4, 5, 5, 5]
remove_set = [3, 5]
# remove_set에 포함되지 않은 값만을 저장
result = [i for i in a if i not in remove_set]
print(result)
※ a에 포함된 원소를 하나씩 확인하며 그 원소가 remove_set에 포함되어 있지 않았을 때만 리스트 변수인 result에 넣겠다는 의미
# 변수를 선언합니다.
example_list = ["요소A", "요소B", "요소C"]
# 그냥 출력합니다.
print("# 단순 출력")
print(example_list)
print()
# enumerate() 함수를 적용해 출력합니다.
print("# enumberate() 함수 적용 출력")
print(enumerate(example_list))
print()
# list() 함수로 강제 변환해 출력합니다.
print("# list() 함수로 강제 변환 출력")
print(list(enumerate(example_list)))
print()
# for 반복문과 enumerate() 함수 조합해서 사용하기
print("# 반복문과 조합하기")
for i, value in enumerate(example_list):
print("{}번째 요소는 {}입니다.".format(i, value))