1. 컬렉션 타입

여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조를 의미합니다. 이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해줍니다. 파이썬에서는 리스트, 튜플, 세트, 딕셔너리 등이 기본적인 컬렉션 타입에 속합니다.

 

 

2. 리스트

여러 값들을 하나의 변수에 저장하고 관리할 수 있게 해주는 순차적인 자료구조입니다.

(여러개의 저장공간이 나열되어 있는 것)

 

리스트의 사용 목적

1. 여러 번 선언하지 않고, 한번만 선언하기 위해 사용

2. 규칙성이 없는 값에 규칙성을 부여하기 위해 사용 (순서가 필요하면 리스트에 담는다.)

 

 

 

 

1. 생성

리스트는 대괄호 [ ] 사용하여 생성하며, 내부에 포함된  항목들은 쉼표로 구분됩니다.

list 선언
       list명 = [값, 값2, ...]                   # 어떤 값을 넣을 지 알 때
       list명 = [값] * 칸수                       # 값은 모르지만, 칸 수는 알 때
       list명 = []                              # 어떤 값인지도 모르고, 칸 수도 모를때
       list명 = list(range(start, end, step))

 

 

li1 =[1, 3, 5, 7, 9]
print(li1)
print(type(li1))
더보기

[1, 3, 5, 7, 9]

<class 'list'>

 

li2 = list([1, 3, 5, 7, 9])
print(li2)
print(type(li2))
더보기

[1, 3, 5, 7, 9]

<class 'list'>

 

li3 = ['푸바오', '아이바오', '러바오']
print(li3)
더보기

['푸바오', '아이바오', '러바오']

 

li4 = [1, 50.5, '푸바오', True]
print(li4)

print('=====리스트 안에 있는 개체들 타입 알기======')
print(type(li4[0]))
print(type(li4[1]))
print(type(li4[2]))
print(type(li4[3]))
더보기

[1, 50.5, '푸바오', True]

=====리스트 안에 있는 개체들 타입 알기======

<class 'int'>

<class 'float'>

<class 'str'>

<class 'bool'>

 

li1 = [1, 3, 5, 7, 9]
print(li1)
print(li1[0])
print(li1[-1])
print(li1[0] + li1[-1])
더보기

[1, 3, 5, 7, 9]

1

9

10

 

2. 인덱싱

리스트의  항목은 위치(인덱스) 가지고 있으며, 인덱스를 사용하여 접근할  있습니다. 인덱스는 0부터 시작합니다.

li2 = [1, 2, '파이썬', ['푸바오', '아이바오']] # 리스트 안에 리스트 : 2차원
print(li2)

print("======인덱싱=======")
print(li2[0])
print(li2[3])
print(li2[3][0])
더보기
[1, 2, '파이썬', ['푸바오', '아이바오']]
======인덱싱=======
1
['푸바오', '아이바오']
푸바오

 

li3 = ['푸바오', '아이바오', '러바오', ['🐼','🍎','⚽️','☕️']]
print(li3)
print(li3[-1])
print(li3[-1][2])
더보기

['푸바오', '아이바오', '러바오', ['🐼', '🍎', '⚽️', '☕️']]

['🐼', '🍎', '⚽️', '☕️']

⚽️

 

li4 = [1,2,3,['푸바오', '아이바오', '러바오', ['🐼','🍎','⚽️','☕️']]]
print(li4)
print("=======인덱싱=====")
print(li4[2])
print(li4[-2])
print(li4[-1][-2])
print(li4[-1][-1][-1])
더보기

[1, 2, 3, ['푸바오', '아이바오', '러바오', ['🐼', '🍎', '⚽️', '☕️']]]

=======인덱싱=====

3

3 러바오

☕️

 

3. 슬라이싱

리스트의 일부분만을 추출할  있습니다.

li1 = [10, 20, 30, 40 ,50]
print(li1)
print(li1[0:3]) # 인덱스 [0]부터 [2]까지 출력
더보기

[10, 20, 30, 40, 50]

[10, 20, 30]

 

 

인덱싱과 슬라이싱 주의점

  1. 인덱싱하면 차원 하나 벗겨짐
  2. 슬라이싱하면 차원 유지

 

 

4. 변경 가능

리스트의 항목들은 변경할  있습니다. , 리스트의 항목들을 수정, 추가, 삭제할  있습니다.

li2 = li1
print(li2)
li2[0] = 100 # [0]의 요소를 100으로 변경
print(li1)
print(li2)
더보기

[10, 20, 30, 40, 50]

[100, 20, 30, 40, 50]

[100, 20, 30, 40, 50]

 

li3 = [10, 20, 30,['푸바오', '아이바오', '러바오'], 40, ['🐼','🍎','⚽️','☕️']]
print(li3[2:6])

print(li3[5][:1])
더보기

[30, ['푸바오', '아이바오', '러바오'], 40, ['🐼', '🍎', '⚽️', '☕️']]

['🐼']

 

 

# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함

# 차원 유지

# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함
li4 = [10, 20, 30, 40, 50]
li4[1:2] = ['★','●','▲']
print(li4)
#차원 유지
더보기

[10, '★', '●', '▲', 30, 40, 50]

 

 

# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함

# 차원 증가

# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트 안에 리스트를 포함
li4 = [10, 20, 30, 40, 50]
li4[1] = ['★','●','▲']
print(li4)
#차원 증가
더보기

[10, ['★', '●', '▲'], 30, 40, 50]

 

li5 = [10, 20, 30, 40, 50]
print(li5[1:3])
li5[1:3] = [] # 빈 리스트를 저장하면 요소가 삭제됨
print(li5)
del li5[2] # 변수 지우기 del
print(li5)
더보기

[20, 30]

[10, 40, 50]

[10, 40]

 

 

5. 연산

리스트 간의 + 연산으로 리스트를 결합할  있고, * 연산으로 리스트를 반복할  있습니다.

# 리스트 병합

#리스트 병합
li6 = [10, 20, 30]
li7 = [40, 50, 60]
print(li6 + li7)
print(li6[2] + li7[1])
더보기

[10, 20, 30, 40, 50, 60]

80

 

li6 = [10, 20, 30]

# inplace 연산
# li6 = li6 + [100,200] # li6 += [40, 50]
li6 += [500,600]
print(li6)
더보기

[10, 20, 30, 500, 600]

 

li6 = [10, 20, 30]
print(li6 * 3)
print(li6[0] + li6[2])

li6[1] = '푸바오'
print(li6)
#print(li6[0] + li6[1]) # 같은 타입이 아니면 연산이 안됨 
#TypeError: unsupported operand type(s) for +: 'int' and 'str'
더보기

[10, 20, 30, 10, 20, 30, 10, 20, 30]

40

[10, '푸바오', 30]

 

 

 

6. 함수와 메서드

리스트를 다루기 위한 여러 함수와 메소드들이 있습니다.

# len(): 객체의 길이(항목의 개수)를 반한하는 내장 함수

# len(): 객체의 길이(항목의 개수)를 반한하는 내장 함수
print(len(li6))

 

# append(): 리스트에 사용되며, 리스트의 끝에 새로운 항목을 하나만 추가하는 메서드

# append(): 리스트에 사용되며, 리스트의 끝에 새로운 항목을 하나만 추가하는 메서드
li6= [10, 20, 30]
print(li6)

li6.append(40)
print(li6)
li6.append([200,300])
print(li6)
더보기

[10, 20, 30]

[10, 20, 30, 40]

[10, 20, 30, 40, [200, 300]]

 

# extend(): 리스트에 iterable(반복 가능한 객체 : 순서를 부여받는 객체)의 모든 항목을 추가하는 메서드

# extend(): 리스트에 iterable(반복 가능한 객체 : 순서를 부여받는 객체)의 모든 항목을 추가하는 메서드
li6 = [10, 20 ,30]
print(li6)
li6.extend([50])
print(li6)
li6.extend([1000,2000]) # 여러 개 추가
print(li6)
더보기

[10, 20, 30]

[10, 20, 30, 50]

[10, 20, 30, 50, 1000, 2000]

 

# pop(): 리스트에서 항목을 삭제하고, 삭제된 항목을 반환하는 메서드

# pop(): 리스트에서 항목을 삭제하고, 삭제된 항목을 반환하는 메서드
li6 = [10, 20, 30]
print(li6)
print(li6.pop()) #인플레이스 연산
print(li6)
더보기

[10, 20, 30]

30

[10, 20]

 

li6 = [10, 20, 30]
result = li6.pop()
print(result)

 

# insert(): 리스트의 특정 인덱스에 항목을 추가하는 메서드

# insert(): 리스트의 특정 인덱스에 항목을 추가하는 메서드
li6 = [10, 20, 30]
li6.insert(1, 100) # 인덱스 1에 100추가 원래 인덱스1에 있던 요소는 2로 밀림
print(li6)
더보기

[10, 100, 20, 30]

li6.insert(1,[1000,2000])
print(li6)
더보기

[10, [1000, 2000], 100, 20, 30]

 

# index(): 리스트에서 특정 값의 인덱스를 반환하는 메서드. 특정 값의 인덱스가 없다면 에러발생

# index(): 리스트에서 특정 값의 인덱스를 반환하는 메서드. 특정 값의 인덱스가 없다면 에러발생
li6 = [10, 20, 30]
print(li6.index(20))  # 괄호요소의 인덱스 위치를 알려줌
#print(li6.index(40)) #없는 값은 에러 ValueError : 40 is not i list

 

# reverse(): 리스트의 항목들의 순서를 뒤집는 메서드

# reverse(): 리스트의 항목들의 순서를 뒤집는 메서드
li7 = [10, 13, 20, 30, 5]
li7.reverse()
print(li7)
더보기

[5, 30, 20, 13, 10]

li7 = ['푸바오', '아이바오', '러바오', '루이바오', '후이바오']
li7.reverse()
print(li7)
더보기

['후이바오', '루이바오', '러바오', '아이바오', '푸바오']

 

- 값 삭제
            list명.remove(값)             # 중복 시 먼저 나온 값(낮은 인덱스 값)이 삭제

            del(list명[인덱스])            # 인덱스로 삭제
            del list명[인덱스]

            list명.clear()               # 모든 값 삭제

※ 슬라이싱을 사용하여 리스트의 순서를 뒤집는 방법

슬라이싱(slicing) 파이썬에서 시퀀스 타입의 객체(: 리스트, 문자열, 튜플 ) 일부를 추출하는 방법입니다. 슬라이싱의 기본 구조는 [start:stop:step]입니다.

 

1. start: 슬라이스의 시작 인덱스입니다.  인덱스의 요소는 슬라이스에 포함됩니다. start 생략하면, step 양수이면 0, step 음수이면 -1 간주됩니다.

 

2. stop: 슬라이스의  인덱스입니다.  인덱스의 요소는 슬라이스에 포함되지 않습니다. stop 생략하면, step 양수이면 시퀀스의 , step 음수이면 시퀀스의 시작으로 간주됩니다.

 

3. step: 슬라이스의 스텝(증감) 값입니다. step 생략하면 1 간주됩니다.

li8 = ['푸바오', '아이바오', '러바오', '루이바오', '후이바오']
print(li8[::]) # 데이터 그대로 출력
print(li8[::-1]) # start와 stop을 생략하고 step을 -1로 설정한 슬라이싱

#[start : stop : step]
# start를 생략하면 -1로 간주. 즉, 시퀀스의 마지막 요소부터 시작
# stop을 생략하면 0으로 간주. 즉, 시퀀스의 시작까지 진행
# step이 -1이므로, 시퀀스의 요소를 뒤에서부터 앞으로 하나씩 건너뛰어서 슬라이싱
더보기

['푸바오', '아이바오', '러바오', '루이바오', '후이바오']

['후이바오', '루이바오', '러바오', '아이바오', '푸바오']

 

# sort(): 리스트의 항목들을 정렬하는 메서드.

# inplace 연산을 수행 변수에 담지 않아도 오름차순으로 저장이 됨

# sort(): 리스트의 항목들을 정렬하는 메서드. inplace 연산을 수행
li7 = [10, 13, 20, 30, 5]
li7.sort() # 오름차순
print(li7) # inplace연산이므로 재저장 오름차순대로 저장이됨
더보기

[5, 10, 13, 20, 30]

 

# sort(reverse=True) #내림차순

#sort(reverse=True) #내림차순
li7 = [10, 13, 20, 30, 5]
li7.sort(reverse=True)
print(li7)
더보기

[30, 20, 13, 10, 5]

 

li2 = ['Apple', 'apple', 'orange', 'banana', 'melon']
li2.sort() #아스키코드에 따라 오름차순
print(li2)
더보기

['Apple', 'apple', 'banana', 'melon', 'orange']

li8 = ['푸바오', '아이바오', '러바오', '루이바오', '후이바오']
li8.sort() #유니코드에 따라 오름차순
print(li8)
더보기

['러바오', '루이바오', '아이바오', '푸바오', '후이바오']

 

# sorted():  iterable(반복 가능한 객체)의 모든 항목들을 정렬한 후, 그 결과를 새로운 리스트에 담아 반환하는 함수

# inplace연산이 아니기 때문에 변화된 모습으로 남지않음, 따라서 변환값을 변수에 담아야함

# ✔ 비교
# sorted():  iterable(반복 가능한 객체)의 모든 항목들을 정렬한 후, 그 결과를 새로운 리스트에 담아 반환하는 함수
li10 = [ 10, 40, 30, 100, 90, 50]
print(sorted(li10)) #오름차순
print(sorted(li10, reverse=True)) #거꾸로
print(li10) #inplace연산이 아니기 때문에 변화된 모습으로 남지않음, 따라서 변환값을 변수에 담아야함

li10 = sorted(li10) # 반환값 변수에 담음
print(li10)
더보기

[10, 30, 40, 50, 90, 100]

[100, 90, 50, 40, 30, 10]

[10, 40, 30, 100, 90, 50]

[10, 30, 40, 50, 90, 100]

 

# count(): 리스트에서 특정 값의 개수를 반환하는 메서드

# count(): 리스트에서 특정 값의 개수를 반환하는 메서드
li11 = [10, 20, 30, 50, 20, 40, 30, 20]
print(li11.count(20)) #데이터 안에 똑같은 데이터가 몇개가 있는지 개수를 세줌
print(li11.count(16))

'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글

6. 파이썬 컬렉션 타입 - 세트  (0) 2023.12.07
5. 파이썬 컬렉션 타입 - 튜플  (2) 2023.12.07
3. 문자열 다루기  (1) 2023.12.07
2. 파이썬의 변수  (1) 2023.12.07
1. 파이썬의 출력  (1) 2023.12.07