본문 바로가기
파이썬

파이썬 컬렉션 타입[리스트]

by 코낄2 2023. 9. 4.

컬렉션 타입

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

 

1. 리스트

여러 값들을 하나의 변수에 저장하고 관리할  있게 해주는 순차적인 자료구조입니다. 대괄호 [ ] 사용하여 생성하며, 내부에 포함된  항목들은 쉼표로 구분됩니다.

li1 = [1, 2, '파이썬', ['김사과', '오렌지']]
li2 = ['김사과', '오렌지', '반하나', ['🍔','🍟','🌭','🍕']]

위의 리스트 처럼 각자 타입이 다른 데이터를 저장할 수 있으며 리스트 안의 요소로 또 리스트가 들어갈 수도 있습니다.

(1)인덱싱

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

print(li2[0])        >>  '김사과'
print(li2[-1])       >>  ['🍔', '🍟', '🌭', '🍕'] 
print(li2[-1][1])   >>  🍟

(2)슬라이싱

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

li3 = [10, 20, 30, ['김사과', '오렌지', '반하나'],40, ['🍔','🍟']]
print(li3[2:6])           >>[30, ['김사과', '오렌지', '반하나'], 40, ['🍔', '🍟']]
print(li3[5][:1])         >>['🍔']

(3)변경

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

li1 = [10, 20, 30]
li1[1] = 100
print(li1)             >>[10, 100, 30]
li1= [10,20,30]
li2= [40,50,60]
print(li1 + li2)      >>[10, 20, 30, 40, 50, 60]
print(li2 + li1)      >>[40, 50, 60, 10, 20, 30]
 
li1 = li1 + [40, 50]   # li1 += [40,50]
print(li1)              >>[10, 20, 30, 40, 50]
li2 = [10,20,30]
print( li2[0] + li2[2] )          >>40
# 같은 int 타입이기 때문에 덧셈 가능

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

li2 = [100, 20, 30, 40, 50]
li2[1:2]= ['😀','😎','😋']
print(li2)                            >> [100, '😀', '😎', '😋', 30, 40, 50]

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

li2 = [100, 20, 30, 40, 50]
li2[1]= ['😀','😎','😋']
print(li2)                            >>[100, ['😀', '😎', '😋'], 30, 40, 50]

# 삭제하는 방법 : 빈 리스트 이용, del 메소드 이용

li2 = [100, 20, 30, 40, 50]
li2[1:3] = []      # 빈 리스트를 저장하면 요소가 삭제됨
print(li2)           >>[100, 40, 50]
 
li2 = [100, 20, 30, 40, 50]
del li2[2]
print(li2)           >>[100, 20, 40, 50]

(4) 여러 함수와 메소드

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

li1= [10,20,30]
print(len(li1))            >> 3

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

li1 = [10, 20, 30]
li1.append(100)
print( li1)                   >>[10, 20, 30, 100]
li1.append([200,300])    
# 여러 항목 추가는 불가하기 때문에 li1.append(200,300)는 에러남. [200, 300]이라는 리스트 요소 한개 추가는 가능.
print( li1)                   >>[10, 20, 30, 100, [200, 300]]

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

li1 = [10, 20, 30]
li1.extend([1000,2000])  # 리스트 형식으로 넣어야 함.
print(li1)              >>[10, 20, 30, 1000, 2000]

# pop(): 리스트에서 항목을 삭제하고, 삭제된 항목을 반환(리턴값 저장)하는 메서드. in-place 연산.

li1 = [10, 20, 30, 40, 50]
print(li1.pop())        >>50    # 50 삭제를 하고 재저장까지 완료됨. in-place 연산
print(li1)                 >> [10, 20, 30, 40]

# insert(): 리스트의 특정 인덱스에 항목을 추가하는 메소드. (수정이 아닌 삽입)

li1 = [10, 20, 30]
li1.insert(1,100# 인덱스 1번 위치에 100을 삽입.
print(li1)            >> [ 10, 100, 20, 30]

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

li1 = [10, 100, 20, 30]
print(li1.index(100))            >> 1
 
# print( li1.index(50)) #ValueError: 50 is not in list

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

li1 = [100, 50, 70, 60, 20]
li1.reverse()  # in-place 메서드
print(li1)       >>[20, 60, 70, 50, 100]
# 슬라이싱을 사용하여 리스트의 순서를 뒤집는 방법 
슬라이싱의 기본 구조는 [start:stop:step]
 
li1 = ['Apple', 'apple','orange','banana','melon']
 
print( li1[ : : -1])          >> ['melon', 'banana', 'orange', 'apple', 'Apple']
# start를 생략하면, step이 양수이면 0, step이 음수이면 -1로 간주됩니다.
# stop을 생략하면, step이 양수이면 시퀀스의 끝, step이 음수이면 시퀀스의 시작으로 간주됩니다.
# step을 생략하면 1로 간주
# = print( li1[-1,0,-1])   

# sort(): 리스트의 항목들을 오름차순으로 정렬하는 메서드. in-place 연산을 수행

li1 = [10, 40, 30, 100, 90, 50]
li1.sort()
print(li1)       >>[10, 30, 40, 50, 90, 100]
 
li1.sort(reverse = True# 내림차순
print(li1)       >>[100, 90, 50, 40, 30, 10]
 
# 한글과 영어도 유니코드 기준으로 오름차순, 내림차순이 가능하다
 
li2 = ['Apple', 'apple','orange','banana','melon']
li2.sort()
print(li2)             >> ['Apple', 'apple', 'banana', 'melon', 'orange']

li3 = ['김사과', '오렌지','반하나','이메론','배애리']
li3.sort()
print(li3)             >>['김사과', '반하나', '배애리', '오렌지', '이메론']

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

in-place 연산이 아니기때문에 피연산자가 수정+저장되는 것이 아니다.

li1 = [10, 40, 30, 100, 90, 50]
print(sorted(li1))       >>[10, 30, 40, 50, 90, 100]  # in-place 연산이 아님
print(li1)                   >>[10, 40, 30, 100, 90, 50]  # 오름차순 저장이 안된 상태
print(sorted(li1, reverse=True))   >> [100, 90, 50, 40, 30, 10] # 내림차순
print(li1)                   >>[10, 40, 30, 100, 90, 50] 

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

li1 = [10, 20, 30, 50, 20, 40, 30, 20]
print(li1.count(20))      >> 3
print(li1.count(16))      >> 0    # 값이 없어도 에러가 나지 않고 0으로 결과 표출.

*** in-place 연산이란?

'바꿔치기 연산'이라고도 하며 연산 결과를 피연산자에 바로 저장한다.

'파이썬' 카테고리의 다른 글

input 함수  (0) 2023.09.05
파이썬 컬렉션 (튜플)  (0) 2023.09.05
문자열  (0) 2023.09.01
파이썬 변수  (0) 2023.09.01
print 함수  (0) 2023.09.01