1. 순차적인 자료 구조. 0번부터 시작하는 인덱스 번호 순으로 저장
2. 대괄호 [ ] 안에 데이터를 저장한다.
3. 리스트의 원소들은 수정 가능하다.
4. 여러가지 자료형의 데이터를 혼용해서 저장할 수 있다.
리스트를 생성하는 방법은
원소들을 직접 선언하는 방법이 있고,
# 방법1.
a = [] # 비어있는 리스트
b = [10, 20, 30]
c = ['파이썬','자바','오라클','JSP','Spring','tensorflow','keras']
d = [30, 3.14, True, False, 'java']
list1 = ['사과','포도','바나나','키위','복숭아']
print(type(list1)) # <class 'list'>
print(list1) # ['사과', '포도', '바나나', '키위', '복숭아']
print(list1[0]) # 사과
print(list1[1]) # 포도
list1[0] = 'apple' # '사과'를 apple로 수정
print(list1[0]) # apple
list 함수와 range 함수를 함께 사용하여 리스트를 만들 수도 있다.
# 방법2.
# list(), range() 함수를 이용해서 연속적인 데이터를 가진 리스트 생성
list2 = list(range(10)) # 0 ~ 9
list3 = list(range(1,11)) # 1 ~ 10
list4 = list(range(1,11,2)) # 1, 3, 5, 7, 9
print('list2:', list2) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print('list3:', list3) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('list4:', list4) # [1, 3, 5, 7, 9]
리스트의 원소를 인덱싱 할 수 있다. (튜플에서 적용)
s = ['자바','파이썬','오라클','스프링','텐스플로우']
print(s)
print(s[0]) # 자바
print(s[1]) # 파이썬
print(s[2]) # 오라클
print(s[3]) # 스프링
print(s[4]) # 텐스플로우
print(s[-1]) # 가장 마지막 원소 인덱싱 : 텐스플로우
print(s[-2]) # 끝에서 2번빼 원소를 인덱싱 : 스프링
중첩 리스트.
리스트 안에 또 다른 리스트가 들어가 있을 수도 있다.
# 중첩 리스트
listdata = [1, 2, 'a', 'b', 'c', [4, 5, 6]]
data1 = listdata[1]
data2 = listdata[3]
data3 = listdata[5]
data4 = listdata[5][1]
data5 = listdata[-1] # 마지막 원소
print('data1:', data1) # 2 출력
print('data2:', data2) # b 출력
print('data3:', data3) # [4, 5, 6] 출력
print('data4:', data4) # 5 출력
print('data5:', data5) # [4, 5, 6] 출력
삼중으로 중첩하는 삼중 리스트도 있다.
# 삼중 리스트
list = [1, 2, ['a', 'b', ['Life', 'is']]]
data = list[2][2][0]
print('data:', data) # Life 출력
슬라이싱
리스트 [ 시작index : 끝index ]
-> 시작 인덱스부터 끝인덱스-1 까지 슬라이싱
s = ['자바','파이썬','오라클','스프링','텐스플로우']
# 인덱스 0~1번 원소 슬라이싱
print(s[0:2]) # ['자바', '파이썬']
# 인덱스 1~2번 원소 슬라이싱
print(s[1:3]) # ['파이썬', '오라클']
# 처음부터 인덱스 2번 원소까지 슬라이싱
print(s[:3]) # ['자바', '파이썬', '오라클']
# 인덱스 2번부터 끝까지 슬라이싱
print(s[2:]) # ['오라클', '스프링', '텐스플로우']
중첩 리스트의 슬라이싱
# 중첩 리스트에서 슬라이싱
s1 = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
# 인덱스 2~4번까지 원소를 슬라이싱
print(s1[2 : 5]) # [3, ['a', 'b', 'c'], 4]
print(s1[3][:2]) # ['a', 'b']
numpy
리스트를 숫자 형태의 배열 형태로 만든다.
리스트는 여러가지 자료형을 혼용하여 저장할 수 있지만,
배열은 한가지 자료형의 집합이므로 반드시 일정한 형태의 자료형만 들어갈 수 있다.
같은 숫자라도 정수와 실수를 함께 넣은 리스트를 변환할 경우
모든 정수가 조금 더 큰 자료형인 실수형으로 변환되어 배열로 처리된다.
import numpy as np
s3 = [[1,2,3],[4,5,6],[7,8,8]] # 중첩 리스트
a1 = np.array(s3) # 배열 형태로 변환 -> 2차원 형태
print(a1)
리스트의 연산 ( +, * (반복))
# 리스트의 연산 : +
data1 = ['a','b','c','d','e']
data2 = ['f','g','h','i','j']
result1 = data1 + data2
result2 = data2 + data1
print('result1:', result1) # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
print('result2:', result2) # ['f', 'g', 'h', 'i', 'j', 'a', 'b', 'c', 'd', 'e']
# 리스트의 연산 : *
listdata = list(range(3)) # [0, 1, 2]
print(listdata)
result = listdata * 3 # listdata를 3번 반복한 리스트
print('result:', result) # [0, 1, 2, 0, 1, 2, 0, 1, 2]
sum
모든 원소들의 합을 구할 수 있다.
이 때, range 함수를 중첩 사용할 수 있다.
list1 = [2,2,1,3,8,5,7,6,3,6,2,3,9,4,4]
list2 = list(range(1,11)) # 1 ~ 10
result1 = sum(list1)
result2 = sum(list2)
print('result1:', result1) # 65
print('result2:', result2) # 55
len
문자의 길이를 구해주는 함수였지만, 리스트에서 사용하면 모든 원수의 개수를 구해준다.
listdata = [2,2,1,3,8,5,7,6,3,6,2,3,9,4,4]
length = len(listdata)
print('원소의 개수:', length) # 15 개의 원소
insert, append
- insert : 리스트의 특정 위치에 원소를 삽입할 때 사용
- append : 리스트의 가장 마지막 자리에 새로운 원소가 추가된다
a = [1, 2, 3]
a.append(4) # 4 추가
print('a:', a) # [1, 2, 3, 4]
a.append([5, 6]) # [5, 6] 추가
print('a:', a) # [1, 2, 3, 4, [5, 6]]
# insert( 인덱스 번호, 데이터 )
a = [1, 2, 3]
# 인덱스 0번 위치에 4를 삽입
a.insert(0, 4)
print('a:', a) # [4, 1, 2, 3]
# 인덱스 3번 위치에 5를 삽입. 기존 원소는 순서가 한 칸 밀린다.
a.insert(3, 5)
print('a:', a) # [4, 1, 2, 5, 3]
remove, del
리스트의 원소를 삭제하는 원소는 두 가지가 있는데 그 중 하나이다.
특정 원소를 삭제하며, 사용 형식은 remove('삭제할 데이터') 이다.
중복된 데이터가 있을 경우 첫번째 값만 삭제한다.
a = [1, 2, 3, 1, 2, 3]
a.remove(3) # 첫번째로 나오는 3을 삭제
print('a:', a) # [1, 2, 1, 2, 3]
a.remove(3) # 두번째로 나오는 3을 삭제
print('a:', a) # [1, 2, 1, 2]
반면, del은 인덱스 번호를 이용해 삭제한다.
사용형식은 del 리스트이름[ 인덱스번호 ]
a = [1, 2, 3]
del a[1] # 인덱스 1번 원소 삭제
print('a:', a) # [1, 3]
b = [1, 2, 3, 4, 5]
del b[2:] # 인덱스 2번 원소부터 끝까지 삭제
print('b:', b) # [1, 2]
del b # 리스트 b를 메모리 상에서 삭제
print(b) # NameError: name 'b' is not defined
index
리스트에서 특정 원소의 인덱스 번호를 구해준다. (자바의 IndexOf)
solarsys = ['태양','수성','금성','지구','화성','목성','토성','천왕성','해왕성','지구']
planet = '지구'
# 가장 먼저 나오는 '지구'의 인덱스 번호를 구함
pos = solarsys.index(planet) # 인덱스 번호 : 3
print('%s은(는) 태양계에서 %d번째 위치하고 있습니다.'%(planet, pos))
# 인덱스 5번 이후에 나오는 '지구'의 인덱스 번호를 구함
pos = solarsys.index(planet, 5) # 인덱스 번호 : 9
print('%s은(는) 태양계에서 %d번째 위치하고 있습니다.'%(planet, pos))
파이썬에서 같은 기능을 하는
문자열의 인덱스를 구하는 find 함수의 경우 -1을 리턴하지만
index는 오류가 발생한다.
# 찾는 원소가 없는 경우에는 오류 발생
pos = solarsys.index('명왕성')
print(pos)
pop
리스트의 가장 마지막 원소를 삭제하고 리턴한다.
지정된 인덱스가 있다면 해당 원소를 삭제하고 리턴한다.
list = [10, 20, 30, 40, 50]
data1 = list.pop() # 마지막 원소인 50을 삭제하고 50을 리턴
print('data1:', data1) # 50
print('list:', list) # [10, 20, 30, 40]
data2 = list.pop(2) # 인덱스 2번 원소(30)를 삭제하고 리턴
print('data2:', data2) # 30
print('list:', list) # [10, 20, 40]
sort, sorted
- sort : 리스트를 정렬하지만 원본에 영향을 미친다.
- sorted : 리스트를 정렬하지만 원본에는 영향이 없다.
# ----------------------- sort ------------------------------
# 오름차순 정렬 내림차순 정렬
#------------------------------------------------------------
# 숫자 1, 2, 3, ..... 10, 9, 8,.....
# 문자 사전순 정렬(a,b,c...) 사전 역순 정렬(z,y,x...)
# 오름차순 정렬 : 리스트.sort()
# 내림차순 정렬 : 리스트.sort( reverse = True)
namelist = ['Mary','Sams','Aimy','Tom','Michale','Bob','Kelly']
namelist.sort() # 오름차순 정렬
print('namelist:', namelist) # ['Aimy', 'Bob', 'Kelly', 'Mary', 'Michale', 'Sams', 'Tom']
namelist.sort(reverse=True) # 내림차순 정렬
print('namelist:', namelist) # ['Tom', 'Sams', 'Michale', 'Mary', 'Kelly', 'Bob', 'Aimy']
# 오름차순 정렬 : sorted( 리스트 )
# 내림차순 정렬 : sorted( 리스트, reverse = True )
# sorted() 함수를 이용해서 정렬을 하면 원본 리스트가 변경되지 않는다.
namelist = ['Mary','Sams','Aimy','Tom','Michale','Bob','Kelly']
result1 = sorted(namelist) # 오름차순 정렬
result2 = sorted(namelist, reverse= True) # 내림차순 정렬
print(type(result1)) # <class 'list'>
print(type(result2))
print('result1:', result1) # ['Aimy', 'Bob', 'Kelly', 'Mary', 'Michale', 'Sams', 'Tom']
print('result2:', result2) # ['Tom', 'Sams', 'Michale', 'Mary', 'Kelly', 'Bob', 'Aimy']
# sorted() 함수로 정렬하더라도 원래 namelist는 변경되지 않는다.
print('namelist:', namelist)
reverse
리스트의 원소의 순서를 역순으로 바꾸는 기능을 하고, 원본에 영향을 준다.
listdata = list(range(10)) # 0 ~ 9
print(listdata) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
listdata.reverse() # listdata 역순으로 변경
print('listdata:', listdata) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
정렬하는 여러가지 방법
# [1, 3, 5, 4, 2] 라는 리스트를 [5, 4, 3, 2, 1]로 변경
list = [1, 3, 5, 4, 2]
# 방법1. sort()
list.sort(reverse=True) # 내림차순 정렬
print('list:', list)
# 방법2. sort(), reverse()
list.sort() # 오름차순 정렬
list.reverse() # 역순으로 정렬
print('list:', list)
# 방법3. sorted()
list2 = sorted(list, reverse=True) # 내림차순 정렬
print('list2:', list2)
# 방법4. sorted(), reverse()
list3 = sorted(list) # 오름차순 정렬
list3.reverse() # 역순으로 정렬
print('list3:', list3)
'파이썬' 카테고리의 다른 글
순서가 없는 데이터의 집합 set (0) | 2022.11.02 |
---|---|
튜플 (0) | 2022.11.02 |
과제) 피보나치 수열 구하기 (0) | 2022.11.01 |
이스케이프 문자 (0) | 2022.10.31 |
str의 여러가지 함수 - upper, lower, format, len, count, find, strip, isdgit, join, split (0) | 2022.10.31 |