본문 바로가기
KDT/Python

자료구조(Data Structure) - 리스트(List)

by jhwannabe 2023. 3. 6.

코드상에서 데이터를 효율적으로 처리하기 위해서 데이터 특징에 따라 체계적으로 구조화하여 저장하는 방식

 

1. 리스트(List)

  • 여러가지 데이터 및 데이터 타입을 콤마로 구분하여 대괄호로 감싼 자료구조
a = 10 # 스칼라
print(a)

li1= [1, 3, 5, 7, 9]
print(li1)

# li2 = list(1, 3, 5, 7, 9) # TypeError: list expected at most 1 argument, got 5
li2 = list([1, 3, 5, 7, 9])
print(li2)

li4 = [1, 50.5, '김사과', True] # 각자 타입이 다른 데이터를 저장
print(li4)

print(type(li4))
print(type(li4[0]))
print(type(li4[1]))
print(type(li4[2]))
print(type(li4[3]))
print(type(li4[3:]))

리스트 인덱싱

li1 = [1, 3, 5, 7, 9]
print(li1)
print(li1[2])
print(li1[-1])

li2 = ['김사과', '반하나', '오렌지', ['🍕','🍔','🥨','🍙']]
print(li2[3])
print(li2[3][1])

li3 = [1, 2, 3, ['김사과', '반하나', '오렌지', ['🍕','🍔','🥨','🍙']]]
print(li3[2])
print(li3[-2])
print(li3[-1])
print(li3[3][-2])
print(li3[-1][-1][-1])

리스트 슬라이싱

li4 = [10, 20, 30, 40, 50]
print(li4)
print(li4[1:3])
print(li4[3:])
print(li4[4:])

li5 = li4
print(li5)
li5[0] = 100
print(li5)
print(li4)

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

리스트 연산자

li7 = [10 ,20, 30]
li8 = [40, 50 ,60]

print(li7 + li8) # 리스트 연결연산 [10, 20, 30, 40, 50, 60]
print(li8 + li7) # 리스트 연결연산 [40, 50, 60, 10, 20, 30]
# print(li7 - li8) # TypeError: unsupported operand type(s) for -: 'list' and 'list'
# print(li7 * li8) # TypeError: can't multiply sequence by non-int of type 'list'
print(li7 * 3) # [10, 20, 30, 10, 20, 30, 10, 20, 30]

li9 = [10, 20, 30]
print(li9[0] + li9[2])
li9[1] = '💜'
# print(li9[0] + li9[1]) # TypeError: unsupported operand type(s) for +: 'int' and 'str'

리스트의 수정 및 삭제

li10 = [10, 20, 30]
li10[1] = 100
print(li10)

# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함
li10[1:2] = ['💥','💢','💘']
print(li10) # [10, '💥', '💢', '💘', 30]

# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트 안에 리스트를 포함
li10 = [10, 20, 30]
li10[1] = ['💥','💢','💘']
print(li10) # [10, ['💥', '💢', '💘'], 30]

li10[1:3] = [] # 빈 리스트를 저장하면 요소가 삭제됨
print(li10)

del li10[0] # 인덱스 0번 요소 삭제
print(li10)

리스트 함수

  • append() : 리스트의 요소 맨 마지막 자리에 데이터를 추가
li11 = [10, 20, 30]

print(li11) # [10, 20, 30]
li11.append(100)
print(li11) # [10, 20, 30, 100]
# li11.append(200, 300) # TypeError: append() takes exactly one argument (2 given)
li11.append([200, 300])
print(li11) # [10, 20, 30, 100, [200, 300]]
  •  extend(): 리스트에 요소를 추가
print(li11) # [10, 20, 30, 100, [200, 300]]
# li11.extend(50) # TypeError: 'int' object is not iterable
li11.extend([50])
print(li11) # [10, 20, 30, 100, [200, 300], 50]
li11.extend([60, 70])
print(li11) # [10, 20, 30, 100, [200, 300], 50, 60, 70]
  • inplace 연산
li11 = [10, 20, 30]
li11 = li11 + [40, 50] # li11 += [40, 50]
print(li11) # [10, 20, 30, 40, 50]
  • pop(): 리스트에 맨 마지막에 저장된 데이터를 반환하고 해당 데이터를 삭제
li12 = [10, 20, 30, 40, 50]

print(li12) # [10, 20, 30, 40, 50]
print(li12.pop()) # 50
print(li12) # [10, 20, 30, 40]
temp = li12.pop()
print(temp) # 40
  • remove(): 매개변수로 전달된 데이터를 제거. 같은 데이터가 여러개 있는 경우 처음 출현하는 데이터만 제거
li13 = [10, 20, 30, 40, 50, 20, 40]

print(li13) # [10, 20, 30, 40, 50, 20, 40]
li13.remove(30)
print(li13) # [10, 20, 40, 50, 20, 40]
li13.remove(20)
print(li13) # [10, 40, 50, 20, 40]
li13.remove(20)
print(li13) # [10, 40, 50, 40]
# li13.remove(20) # 지우려는 데이터가 없다면 에러! ValueError: list.remove(x): x not in list
  • insert(): 리스트의 특정 위치(인덱스)에 데이터를 삽입
li14 = [10, 20, 30]

li14.insert(1, 100)
print(li14) # [10, 100, 20, 30]
# index(): 리스트에 저장된 데이터가 있을 경우 위치를 인덱스로 반환, 없으면 에러!
print(li14.index(100))
# print(li14.index(50)) # ValueError: 50 is not in list
  • reverse(): 리스트에 저장된 데이터를 반대 순서로 반환
li15 = [100, 50, 70, 60, 20]
li15.reverse()
print(li15) # [20, 60, 70, 50, 100]

li16 = ['김사과','오렌지', '반하나', '이메론']
li16.reverse()
print(li16) # ['이메론', '반하나', '오렌지', '김사과']
  • sort(): 리스트에 저장된 데이터를 오름차순 또는 내림차순으로 정렬. inplace 연산(재저장)을 수행
li17 = [10, 40, 30, 100, 90, 50]
li17.sort()
print(li17) # [10, 30, 40, 50, 90, 100]
li17.sort(reverse=1)
print(li17) # [100, 90, 50, 40, 30, 10]

li18 = ['Apple', 'apple','Banana', 'banana']
li18.sort()
print(li18) # ['Apple', 'Banana', 'apple', 'banana']
li18.sort(reverse=1)
print(li18) # ['banana', 'apple', 'Banana', 'Apple

li19 = ['김사과','반하나','오렌지','이메론']
li19.sort()
print(li19) # ['김사과', '반하나', '오렌지', '이메론']
li19.sort(reverse=1)
print(li19) # ['이메론', '오렌지', '반하나', '김사과']

✔ 비교
sorted(): 이터러블(iterable) 객체로부터 정렬된 리스트를 생성함.
inplace 연산 수행 X. 재저장 X

li17 = [10, 40, 30, 100, 90, 50]
print(sorted(li17)) # 오름차순 [10, 30, 40, 50, 90, 100]
print(sorted(li17, reverse=1)) # 내림차순 [100, 90, 50, 40, 30, 10]

li17 = sorted(li17) # 값을 유지하려면 다시 저장해야 함
print(li17) # [10, 30, 40, 50, 90, 100]

li18 = ['Apple', 'apple','Banana', 'banana']
print(sorted(li18)) # ['Apple', 'Banana', 'apple', 'banana']
print(sorted(li18, reverse=1)) # ['banana', 'apple', 'Banana', 'Apple']
  • count(): 리스트에 포함된 특정 데이터의 갯수를 반환
li18 = [10, 20, 30, 50, 20, 40, 30, 20]
print(li18.count(20)) # 3
print(li18.count(16)) # 0

✔ 추가
len(): 요소의 갯수를 반환

print(len(li18)) # 8
  • range()를 사용하여 리스트 생성
a = list(range(10))
print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = list(range(5, 12))
print(b) # [5, 6, 7, 8, 9, 10, 11]
c = list(range(-4, 10, 2))
print(c) # [-4, -2, 0, 2, 4, 6, 8]
d = list(range(10, 0, -1))
print(d) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
728x90
반응형

'KDT > Python' 카테고리의 다른 글

제어문1 - 조건문  (0) 2023.03.07
자료구조(Data Structure) - 튜플(Tuple)  (0) 2023.03.07
문자열(String)  (0) 2023.03.06
Input 함수  (0) 2023.03.06
변수(Variable)  (0) 2023.03.06