리스트 List

Jane의 study note.·2022년 12월 1일
0

파이썬 Python

목록 보기
9/31
post-thumbnail

링크:리스트

1_리스트(List)

2_리스트 아이템 조회

3_리스트 길이

4_리스트와 for문

5_리스트와 while문

6_리스트에 아이템 추가

7_리스트의 특정 위치에 아이템 추가

8_리스트의 아이템 삭제

9_리스트의 특정 아이템 삭제

10_리스트 연결

11_리스트 아이템 정렬

12_리스트 아이템 순서 뒤집기

13_리스트 나머지 기능들

-----------------------------------

연습문제

파이썬 문법 중 리스트 자료형

1. 리스트 만들기

) 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]

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

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을 뺀 값의 인덱스까지 처리됨

 · by 명: 17_리스트 슬라이싱

3. 리스트 컴프리헨션

# 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)

4. 리스트 관련 주요 메서드

<입력>
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]
인덱스 23 추가: [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에 넣겠다는 의미

enumerate () 함수

# 변수를 선언합니다.
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))

 · by 명: 09_enumerate()함수

0개의 댓글