코딩배우기

파이썬 리스트 (배열) 정리

탁이 2021. 10. 25. 15:00

파이썬 리스트: 파이썬(Python)에서 다른 언어의 배열과 동등한 데이터 구조는 리스트(목록)로 구현되어 있습니다. 이번에는 리스트(목록)의 사용법을 예제를 위주로 정리해 봤습니다.

목록 초기화

# 리스트 (배열) 초기화 : 대괄호 "[]"로 묶고 요소를 쉼표 ","로 구분하여 배열
empty_list = []  # 빈 목록
print (empty_list)  # []

int_list = [ 0 , 1 , 2  # 정수 목록 (정수 배열)
print (int_list)  # [0, 1, 2]

mylist = [ 0 , 'abc' , 1 , 'def'  # 목록 (배열)에는 모든 유형의 요소를 포함 할
print (mylist)  # [0, 'abc', 1, 'def']

# 목록 (배열) 초기화 : list 함수를 호출
int_list = list ()  # 빈리스트 (배열)
print (int_list)  # []

int_list = list (( 4 ,5 , 6 ))  # 튜플의 요소를 바탕으로 목록 (배열)가 만들어지는
print (int_list)  # [4, 5, 6]

int_list = list (range ( 5 ))  # range 개체에서 정수 목록 (정수 배열 )을 작성
print (int_list)  # [0, 1, 2, 3, 4]

str_list = list ( 'python'  # 문자열의 각 문자를 요소로하는 목록을 작성
print (str_list)  # [ 'p', 'y', 't', 'h', 'o', 'n']

# 목록 내포 표기
int_list = [x for x in range ( 0 , 10 , 2  # range 개체에서 목록을 작성
print (int_list )  # [0, 2, 4, 6, 8]

int_list = [x for x in range ( 10 ) if x % 2 == 1  # if 절을 사용 예
print (int_list)  # [1, 3, 5, 7, 9]

# if else 식을 사용할 때는 for 절 계속 않고 내포 표기 앞부분에
str_list = [c.upper () if c.islower () else c.lower () for c in 'AbCdE' ]
print (str_list)  # [ 'a', ' B ','c ','D ','e ']

# 목록 목록 (배열의 배열)
mylist = [ 0 , 1 , 2 , 3 , 4 ,5 ]]  # 2 차원 목록 (배열)의 작성
print (mylist)  # [[0, 1, 2, 3, 4, 5]

mul_tbl = [x * y for x in range ( 1 , 4 ) for y in range ( 1 , 5 )
print (mul_tbl)  # [[1, 2, 3, 2, 4, 6, 3, 6, 9, 4, 8, 12]

리스트의 요소에 액세스하기 (인덱스)

mylist = list (range ( 10 ))
print (mylist)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 인덱스 액세스
n = mylist [ 1  # 양수는 선두 에서의 인덱스. 첫 번째 요소의 인덱스가 0
print (n)  # 1
n = mylist [- 2  # 음수는 끝에서의 인덱스. 마지막 요소의 인덱스가 -1
print (n)  # 8

# 인덱스를 사용한 요소의 제거
del mylist [ 4 ]
print (mylist)  # [0, 1, 2, 3, 5, 6, 7, 8, 9 ]

# 인덱스를 사용하여 요소를 변경
mylist [- 1 ] = 90
print (mylist)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 90]

리스트의 요소에 액세스 (슬라이스)

# 슬라이스 액세스
mylist = list (range ( 10 ))

s = mylist [ 0 : 5  # 0 ~ 4 번째의 5 요소를 꺼낼
print (s)  # [0, 1, 2, 3, 4]

s = mylist [:]  # 모든 요소를 꺼낼
print (s)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

s = mylist [ 5 :]  # 5 번째 이후의 모든 요소를 추출
print (s)  # [5, 6, 7, 8, 9]

s = mylist [: 5  # 0 ~ 4 번째의 5 요소를 꺼낼
print (s)  # [0, 1, 2, 3, 4]

s = mylist [ 0 : 10 : 2  # 0,2,4,6,8 번째 요소를 추출
print (s)  # [0, 2, 4, 6, 8]

s = mylist [: 2  # 동감
print (s)  # [0, 2, 4, 6, 8]

s = mylist [- 4 :]  # -4 번째부터 끝까지 모든 요소를 꺼낼
print (s)  # [6, 7, 8, 9]

s = mylist [- 1 : - 9 : - 1  # 목록 끝에서 역순으로 요소를 추출
print ( s)  # [9, 8, 7, 6, 5, 4, 3, 2]

# 슬라이스 의한 요소의 제거
mylist = list (range ( 10 ))

del mylist [ 3 : 5  # 세 번째와 네 번째 요소 삭제
print (mylist)  # [0, 1, 2, 5, 6, 7, 8, 9]

del mylist [ 0 : 2  #에서 삭제 결과에서 0,2,4,6 번째 요소를 제거
print (mylist)  # [1, 5, 7, 9]

mylist [ 0 : 2 ] = []  #에서 삭제 결과에서 처음 두 요소를 제거
print (mylist)  # [7, 9]

# 슬라이스로 요소를 변경
mylist = list (range ( 10 ))

mylist [ 1 : 3 ] = [ 10 , 20  # 슬라이스의 시작과 끝을 지정하는 요소를 변경
print (mylist)  # [0, 10, 20, 3, 4, 5 6, 7, 8, 9]

mylist [ 1 : 3 ] = [1 , 1.5 , 2 ] #이 경우 슬라이스과 새로운 값의 요소 수가 달라도 OK
print (mylist)  # [0, 1, 1.5, 2, 3, 4, 5, 6, 7, 8, 9]

mylist = list (range ( 10 ))
mylist [ 1 : 2 ] = [ 10 , 30 , 50 , 70 , 90  # 시작 / 끝 / 증분을 지정하여 요소를 변경
print (mylist)  # [0, 10 2, 30, 4, 50, 6, 70, 8, 90]

mylist [ 0 : 2 ] = [ 0.0 , 2.0 , 4.0  # ValueError :이 경우에는 같은 수의 원소 않으면 안

목록에 요소를 추가 (+ 연산자 / + = 연산자)

mylist = list (range ( 5 ))
print (mylist)  # [0, 1, 2, 3, 4]

# + 연산자를 사용하여 목록의 결합 (리스트의 말미에 목록 추가)
tmp = mylist + 5 , 6  # + 연산자는 새 목록이 생성되는
print (tmp)  # [0, 1, 2, 3, 4, 5, 6]
print (mylist)  # [0, 1, 2, 3, 4]

mylist = mylist + 5   # TypeError : 목록 목록 이외 결합 할 수없는
mylist = mylist + ( 5 , 6  # TypeError : 목록 목록 이외 결합 할 수없는

# + = 연산자를 사용하여 목록 끝으로 요소의 추가
mylist + = 5  # + = 연산 (누적 대입)는 원래 목록이 변경 될
print (mylist)  # [0, 1, 2, 3, 4, 5]

mylist + = 6   # TypeError : 목록에 누적 대입 할 수는 반복 가능 객체 만

mylist + = ( 6 , 7  # 목록 끝에 튜플의 개별 요소 추가
print (mylist)  # [0, 1, 2, 3, 4, 5, 6, 7]

목록에 요소를 추가 (append / extend / insert 메소드)

mylist = list (range ( 5 ))

mylist.append ( 5  #리스트의 말미에 요소를 추가
print (mylist)  # [0, 1, 2, 3, 4, 5]

mylist.append ( 6 , 7  # TypeError : append 메소드의 인수는 하나

mylist.append ( 6 , 7  #리스트의 말미에 단일 요소로 "목록"을 추가
print (mylist)  # [0, 1, 2, 3, 4 5, 6, 7]

mylist.extend ( 8 , 9  #리스트의 말미에 반복 가능 객체의 개별 요소를 추가
print (mylist)  # [0, 1, 2, 3, 4, 5 [6, 7, 8, 9]

mylist.extend ( 10  # TypeError : extend 메소드는 반복 가능 객체 만 전달할

mylist.extend ({ 10 : 'foo' , 11 : 'bar' })  # 반복 가능 객체이므로 OK
print (mylist)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

mylist.insert ( 1 , 0.5  # 지정된 인덱스에 요소를 삽입
print (mylist)  # [0, 0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

목록에서 요소를 제거하기 (del 문장 인덱스 / 조각)

# 인덱스를 지정하고 del 문장에서 요소를 제거
mylist = list (range ( 5 ))  # [0, 1, 2, 3, 4]
del mylist [ 0 ]
print (mylist)  # [1, 2, 3, 4]

# 슬라이스를 지정하고 del 문장에서 요소를 제거
mylist = list (range ( 5 ))  # [0, 1, 2, 3, 4]
del mylist [ 1 : 4  # 1 ~ 3 번째의 요소를 삭제
print (mylist)  # [0 4]

mylist = list (range ( 5 ))  # [0, 1, 2, 3, 4]
del mylist [: 2  # 0,2,4 번째 요소를 제거
print (mylist)  # [1, 3]

mylist = list (range (10 ))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del mylist [ 1 : 7 : 3  # 1 번째와 네 번째 요소를 제거
print (mylist)  # [ 0, 2, 3, 5, 6, 7, 8, 9]

# 슬라이스에서 지정한 범위에 빈 목록을 대입하여 삭제
mylist = list (range ( 10 ))  # [0, 1, 2, 3 4, 5, 6, 7, 8, 9]
mylist [ 4 : 8 ] = []  # 4-7 번째 요소를 제거
print (mylist)  # [0, 1, 2, 3, 8, 9]

print ( 'mylist [:] :' , mylist [:])  # mylist [:] : [0, 1, 2, 3, 8, 9]
mylist [:] = []  # 목록의 모든 요소를 삭제
print(mylist)  # []
mylist = list (range ( 5 ))
del mylist [:]  # 이렇게도 쓸 수 있음

목록에서 요소를 제거 (clear / pop / remove 메소드 목록 내포 표기)

# clear 메소드 목록의 모든 요소를 삭제
mylist = list (range ( 10 ))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print (mylist)  # [0, 1 2, 3, 4, 5, 6, 7, 8, 9]
mylist.clear ()
print (mylist)  # []

# pop 메소드에서 지정한 인덱스에있는 요소를 목록에서 삭제하여 해당 값을 검색
mylist = list (range ( 10 ))
value = mylist.pop ()  # 인덱스를 지정하지 않으면 마지막 요소가 제거
print ( 'popped value :' , value)  # popped value : 9
print ( 'mylist : ' , mylist)  # mylist : 0, 1, 2, 3, 4, 5, 6, 7, 8]

value = mylist.pop ( 5  # 5 번째 요소를 제거
print( 'popped value :' , value)  # popped value : 5
print ( 'mylist :' , mylist)  # mylist : 0, 1, 2, 3, 4, 6, 7, 8]

# remove 메소드에서 삭제할 값 를 지정하여 목록에서 값을 삭제
mylist = [ 2 , 0 , 6 , 0 , 5 , 7 , 2 , 1 , 5 , 5 ]

mylist.remove ( 0  #리스트 내의 요소 0 중 선두에 있는 것을 삭제
print (mylist)  # [2, 6, 0, 5, 7, 2, 1, 5, 5]
mylist.remove ( 0  #리스트 내의 요소 0 중 선두에있는 것을 삭제
print (mylist)  # [2, 6, 5, 7, 2, 1, 5, 5]
mylist.remove ( 0  # ValueError : 지정한 값이 목록에 없으면 예외

# 목록에서 특정 조건에 일치하는 것을 정리해 삭제
mylist = [ 2 , 0 , 6 , 0 , 5 , 7 , 2 , 1 , 5 , 5 ]
target = 0   # 0 요소를 mylist에서 없애

mylist = [item for item in mylist if item! = target]  # 제거 = 그렇지 남기기
print (mylist)  # [2, 6, 5, 7, 2, 1, 5, 5]

목록에서 요소를 검색하는 (in / not in 연산자 count / index 메소드 min / max 함수)

mylist = [ 2 , 5 , 11 , 15 , 1 , 3 , 18 , 3 , 19 , 8  # 10 개의 정수 값을 요소로하는 목록

# 지정된 값이 목록에 포함되어 있는지 포함되어 있지 않은지 검사
result = 0 in mylist  # 정수 값 0이 mylist에 포함되어 있는지를 확인
print (result)  # False

result = 0 not in mylist  # 정수 값 0이 mylist에 포함 여부를 검사
print (result)  # True

# 지정된 값이 목록에 몇 개 포함되어 있는지를 확인
cnt = mylist.count ( 3  # 정수 값 3이 mylist에 몇 개 포함되어 있는지를 확인
print (cnt)  # 2

# 지정된 값이 어떤 인덱스에 있는지를 검색
idx = mylist.index ( 3  # mylist에 포함 된 정수 3 최소의 인덱스를 요구
print (idx)  # 5

idx = mylist.index ( 3 , 6 , len (mylist))  # 검색 범위를 지정
print (idx)  # 7

idx = mylist.index ( 100  # ValueError : 존재하지 않는 값을 지정

#리스트의 요소로 최대 / 최소의 것을 추구
max_value = max (mylist)  # 최대 값을 구하는
print (max_value)  # 19

min_value = min (mylist)  # 최소 요구
print (min_value)  # 1

max_value = max ([])  # ValueError : max 함수 / min 함수에 빈 목록을 전달하면 예외
max_value = max ([], default = 'none'  # defalut 인수는 빈리스트를 건네 주었을 때에 반환
print (max_value)  # none

max_value = max ( 0 , 1 , 4 , 5 , 2 , 3 ])  # 여러 목록 중 최대의 목록을 획득
print (max_value)  # [4,5]

mylist = [ 'pYthon' , 'pyThon' , 'Python' , 'PYTHON' ]
max_value = max (mylist, key = str.lower)  # key 인수를 지정하는 예
print (max_value)  # pYthon

목록의 요소를 정렬 / 정렬 (sort / reverse 메소드 sorted / reversed 함수)

#리스트의 요소를 정렬 (in-place)
mylist = [ 18 , 0 , 16 , 6 , 15 , 7 , 9 , 1 , 2 , 5 ]
mylist.sort ()
print (mylist)  # [0, 1, 2 5, 6, 7, 9, 15, 16, 18]

# 목록의 요소를 정렬 한 새로운 목록을 생성
mylist = [ 18 , 0 , 16 , 6 , 15 , 7 , 9 , 1 , 2 , 5 ]
newlist = sorted (mylist)
print ( 'mylist :' , mylist)  # mylist : 18, 0, 16, 6, 15, 7, 9, 1, 2, 5]
print ( 'newlist :' , newlist)  # newlist : 0, 1, 2, 5, 6, 7, 9, 15, 16, 18]

# 목록의 요소를 정렬 (in-place / 역순)
mylist = [ 18 , 0 , 16 , 6 , 15 , 7 , 9 , 1 , 2 , 5 ]
mylist.sort (reverse = True )
print (mylist)  # [18, 16, 15, 9, 7, 6, 5, 2, 1, 0]

# 정렬에 사용하는 키를 결정하는 함수를 지정
mylist = [- 1.7, 0.1 , 4.5 - 1.5 - 4.6 ]
mylist.sort (key = abs)  # 절대 값 순으로 정렬
print (mylist)  # [0.1, -1.5, -1.7, 4.5, -4.6]

# 람다 식을 사용하여 목록 목록 정렬
mylist = [ 0 , 1 , 2 , 1 , 2 , 0 , 2 , 0 , 1 ]
mylist.sort (key = lambda x : x [ 1 ])  # 1 번째 요소를 키로 목록을 정렬
print (mylist)  # [2, 0, 1, 0, 1, 2, 1, 2, 0]

# key 키워드 인수와 reverse 키워드 인수를 사용
mylist = - 1.7 , 0.1 , 4.5 - 1.5 - 4.6 ]
mylist.sort (key = abs, reverse = True  # 절대 값을 기준으로 내림차순으로 정렬
print (mylist )  # [-4.6, 4.5, -1.7, -1.5, 0.1]

# 요소를 역순으로 정렬 (in-place)
mylist = list (range ( 5 ))  # [0, 1, 2, 3, 4]
mylist. reverse ()
print (mylist)  # [4, 3, 2, 1, 0]

# 요소를 역순으로 정렬 된 새로운 반복자를 생성
mylist = list (range ( 5 ))  # [0, 1, 2, 3 4]
iterator = reversed (mylist)  # reversed 함수의 반환 값은 반복자
print (iterator)  # <list_reverseiterator object at ...>
newlist = list (iterator)  # 반복기에서 목록을 작성
print ( 'mylist :' , mylist)  # mylist : 0, 1, 2, 3, 4]
print ( 'newlist :' , newlist)  # newlist : 4, 3, 2, 1, 0]