[Python] 08.리스트(List)
- Develop/Python
- 2020. 12. 30.
■ 리스트 선언
리스트를 선언하는 방법입니다.
▶︎ 사용방법
기본적으로 []를 사용해서 선언합니다.
["리스트요소","리스트요소","리스트요소","리스트요소"]
▶︎ 예제 코드
strlist = ["TV","냉장고","라디오"]
■ 리스트 인덱싱
리스트를 선언하면 자동으로 인덱싱이 됩니다. 그중에서 원하는 항목을 인덱스를 이용해서 불러옵니다.
▶︎ 사용방법
변수명[인덱스]
▶︎ 예제 코드
코드 :
strlist = ["TV","냉장고","라디오"]
print(strlist[0])
print(strlist[1])
print(strlist[2])
결과 :
TV
냉장고
라디오
■ 문자열 인덱싱
문자열을 리스트로 캐스팅하면 문자열을 하나하나 항목으로 분리합니다.
▶︎ 사용방법
스트링변수="문자열"
인덱스변수=list(스트링변수)
▶︎ 예제 코드
코드 :
a=“hello world”
b=list(a)
print(b)
결과 :
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
■ 문자열 리스트 변경
문자열을 리스트로 변경합니다. split메소드를 이용합니다.
▶︎ 사용방법
변수명.split
▶︎ 예제 코드
코드 :
emails = "apple@fruit.com, daiso@product.com, jeus@god.com, swiss@country.com"
emails_list = emails.split(',')
print(emails_list)
결과 :
['apple@fruit.com', ' daiso@product.com', ' jeus@god.com', ' swiss@country.com']
■ 리스트 항목 변경
리스트의 항목중 특정인덱스의 값을 변경합니다.
▶︎ 사용방법
변수명[인덱스] = 변경할 값
▶︎ 예제 코드
코드 :
strlist = ["귤","바나나","참외","사과","배"]
# 인덱스 0, 즉 천번째 원소 변경 오렌지로 변경됨.
strlist[0] = "오렌지"
# 인덱스 1, 달걀 대신 딸기로 변경됨.
strlist[1] = "딸기"
print(strlist)
결과 :
['귤', '바나나', '참외', '사과', '배']
['오렌지', '딸기', '참외', '사과', '배']
■ 리스트 길이
리스트의 길이를 확인합니다.
▶︎ 사용방법
len(리스트 혹은 리스트 변수)
▶︎ 예제 코드
코드 :
strlist = ["청바지","면바지","반바지"]
print(len(strlist))
결과 : 3
■ 리스트 항목갯수
리스트의 항목들중 특정 항목의 갯수를 확인합니다.
▶︎ 사용방법
변수명.count(항목)
▶︎ 예제 코드
예제 :
strlist = ["오렌지","사과","배","오렌지","귤","참외"]
print(strlist.count("오렌지"))
결과 : 2
■ 리스트의 특정 위치(인덱스)
리스트의 항목 위치를 나타냅니다.
▶︎ 사용방법
변수명.index(항목)
▶︎ 예제 코드
코드 :
strlist = ["패딩","점퍼","가디건"]
print(strlist.index("점퍼"))
결과 : 1
■ 리스트 항목 추가 - 1
리스트의 맨 마지막에 항목을 추가합니다.
▶︎ 사용방법
변수명.append("항목")
▶︎ 예제 코드
코드 :
strlist.append("마이")
print(strlist)
결과 :
['패딩', '점퍼', '가디건', '마이']
■ 리스트 항목 추가 - 2
특정 인덱스 위치에 항목을 삽입합니다.
▶︎ 사용방법
insert(인덱스(항목순서), 항목).
▶︎ 예제 코드
코드 :
아래는 두번째(인덱스는 0부터 시작됨)에 밀가루 원소 추가.
strlist = ["소보루빵","팥빵","크림빵"]
strlist.insert(1,"땅콩빵")
print(strlist)
결과 :
['소보루빵', '땅콩빵', '팥빵', '크림빵']
■ 리스트 원소제거
리스트중에서 특정 항목을 제거합니다.
▶︎ 사용방법
변수명.pop(인덱스)
▶︎ 예제코드
예제 1 : 리스트 맨 마지막 원소 제거. 제거할 항목를 출력. 여기서는 CPU.
코드 :
strlist = ["VGA","MEMORY","CPU"]
print(strlist.pop())
print(strlist)
결과 :
CPU
['VGA', 'MEMORY']
예제 2 : 특정 인덱스가 지정될 경우 그 값을 제거. 제거할 항목을 출력. 여기서는 MEMORY.
코드 :
strlist = ["VGA","MEMORY","CPU"]
print(strlist.pop(1))
print(strlist)
결과 :
MEMORY
['VGA', 'CPU']
■ 리스트 확장 및 합치기
두개의 리스트를 하나로 합칩니다.
▶︎ 사용방법
변수명.extend
▶︎ 예제 코드
코드 :
domestic_car = ["현대","기아","쉐보레"]
forengin_car = ["아우디","벤츠","포르쉐"]
domestic_car.extend(forengin_car)
print(domestic_car)
결과 :
['현대', '기아', '쉐보레', '아우디', '벤츠', '포르쉐']
■ 리스트 복사
리스트의 항목을 복사하는 방법입니다.
▶︎ 사용방법
변수명.copy()
▶︎ 예제 코드
코드 :
artists = ["모네","피카소"]
painters = artists.copy()
painters.append("반 고흐")
print(painters)
결과 :
['모네', '피카소', '반 고흐']
■ 리스트의 리스트
리스트안에 리스트를 만드는 방법입니다.
▶︎ 사용방법
변수명 = [[],[],[]]
▶︎ 예제 코드
# 리스트의 리스트 선언. 아래와 같이 선언시 리스트 인덱스가 생성되고 처음부터 0,1,2로 인덱스가 됩니다.
L = [[],[],[]]
# 리스트 인덱스 0에 값 설정
L[0] = [1,2,3]
print(L)
결과 : [[1, 2, 3], [], []]
# 리스트 인덱스 1에 't' 추가
L[1].append('t')
print(L)
결과 : [[1, 2, 3], ['t'], []]
# 리스트 인덱스 1에 'o' 추가
L[1].append('o')
print(L)
결과 : [[1, 2, 3], ['t', 'o'], []]
# 리스트 인덱스 1번의 0번 인덱스 원소. 'o' 추가
L[1][0] = 'd'
print(L)
결과 : [[1, 2, 3], ['d', 'o'], []]
■ 리스트의 항목 제거시 유의사항
리스트를 다룰 시 항목중 중복값이 연속으로 있을때 원치 않는 상황이 발생할 수도 있습니다.
예제를 통해 알아봅니다.
▶︎ 예제 코드
코드 :
songs = [1,1,5,4]
# 항목이 1일경우 모두 제거.
# 그러나 결과는 1,5,4 모두 출력됨. 1이 제거가 안됨.
for s in songs:
if s==1:
songs.pop(s)
print(songs)
결과 :
출력이 5,4가 아닌 1,5,4가 출력됩니다. 항목중 1 하나가 제거되고 나머지 값 1,5,4로 다시 인덱스가 매겨지는됩니다.
이때 인덱스는 0부터 시작이 되는게 아니라 연산이 되면서 계속 증가되기 때문에 0이 아닌 1로 올라오게 됩니다.
그럼 1,5,4 항목의 인덱스는 1부터 시작하기 때문에 5,4 순서대로 출력되게 되어 있습니다.
[1, 5, 4]
▶︎ 위의 현상들을 예방하는 방법
원소를 특정 리스트에 복사 후 조작합니다. 즉 백업본을 만든 후 백업본을 이용해서 다루고 별도의 저장 변수를 만들어 이곳에 저장시키는 방식입니다. 그러나 이 방식은 좋은건 아닙니다. 만약 대용량의 크기를 다루게 된다면 하나하나 비교해야 하기 때문에 시스템이 급격히 느려질 수 있습니다. 단지 입력값이 작을때 이 방식을 쓰면 좋다는것을 예제로 표현합니다.
▶︎ 예제 코드
코드 :
songs = [1,1,5,4]
songs_copy = songs.copy()
songs = []
# 값을 확인하여 1이 아닌값만 별도의 리스트를 만들어 저장합니다.
for s in songs_copy:
if s != 1:
songs.append(s)
print(songs)
결과 :
[5, 4]
■ 리스트 안에서 값을 찾을시 유의사항.
리스트를 이용해서 값을 찾을때 다음과 같은 유의사항이 있습니다.
많은 양의 리스트에서 특정 값을 찾아낼 시 성능에 문제가 발생할 수 있습니다.
아래와 같은 예제가 있습니다.
number = [9,5,7,1]
songs = {"Wannabe": 1, "Roar": 1, "Let It Be": 5, "Red Corvette": 4}
위의 number는 값이 수만개가 있을시 문제가 발생할 수 있습니다. 예를 들어 20만개 항목안에서 원하는 데이터를 찾을 시 순서대로 읽기때문에 최악의 경우는 가장 마지막에 있을 수 있습니다. 이경우 성능에 치명적인 문제가 발생하게 됩니다.
그러나 아래 키:값 형식은 문제가 발생할 여지가 작습니다. 특정 키로 값을가져오기때문에 바로 항목 위치를 찾아가서 값을 가져오게 됩니다. 그래서 대용량의 검색의 경우 키:값 방식으로 데이터를 검색하는방법이 유리합니다.
이 키:값 방식을 사전 타입이라고 합니다. 다음장에서 설명합니다.
■ 정렬 함수
정렬함수에 대해 알아봅니다. 이 정렬함수들은 리스트 타입에서만 사용됩니다.
▶︎ 사용방법
변수명.sort()
변수명.sort(reverse=False or reverse=True)
변수명.reverse()
sorted(리스트 변수)
▶︎ 예제 코드
코드 :
# 오름차순으로 정렬
a=[9,5,7,1]
print("a 정렬전 : ", a)
a.sort()
print("a 정렬후 : ", a)
# 내림차순, 오름차순 정렬
# reverse옵션을 걸지 않으면 기본적으로 오름차순입니다.
b=[9,5,7,1]
print("b 정렬전 : ", b)
# 내림차순 정렬
b.sort(reverse=True)
print("b reverse=True : ", b)
# 오름차순 정렬
b.sort(reverse=False)
print("b reverse=False : ", b)
# 오름차순 정렬
c=[9,5,7,1]
print("c 정렬전 : ", c)
d=sorted(c)
print("c 정렬후 : ", d)
# 순서 변경
# 기존 리스트들의 순서를 역순으로 변경합니다. sort의 reverse와는 다른 성격입니다.
# 반드시 구분지어서 이해해야 합니다.
d=[9,5,7,1]
print("d 순서 변경전 : ", d)
d.reverse()
print("d 순서 변경후 : ", d)
결과 :
a 정렬전 : [9, 5, 7, 1]
a 정렬후 : [1, 5, 7, 9]
b 정렬전 : [9, 5, 7, 1]
b reverse=True : [9, 7, 5, 1]
b reverse=False : [1, 5, 7, 9]
c 정렬전 : [9, 5, 7, 1]
c 정렬후 : [1, 5, 7, 9]
d 순서 변경전 : [9, 5, 7, 1]
d 순서 변경후 : [1, 7, 5, 9]
■ 리스트안에 특정 항목이 있는지 확인.
리스트안에 원하는 항목이 있는지 확인합니다. 리턴값은 Boolean입니다.
▶︎ 사용방법
변수=비교항목 in 리스트변수
▶︎ 예제 코드
코드 :
alist = ["a","b","c","d"]
true_result = "c" in alist
false_result = "e" in alist
print(true_result)
print(false_result)
결과 :
True
False
pop copy sort reverse
■ 파이선 다른 회차
[Python] Intro : Very Quick Python : https://myinfrabox.tistory.com/169
[Python] 01.Python 준비 : https://myinfrabox.tistory.com/170
[Python] 02.Python 스크립트 작성 방법 : https://myinfrabox.tistory.com/171
[Python] 03.변수 선언 및 할당 : https://myinfrabox.tistory.com/172
[Python] 04.문자열 처리 : https://myinfrabox.tistory.com/173
[Python] 05.조건문 : https://myinfrabox.tistory.com/174
[Python] 06.반복문 : https://myinfrabox.tistory.com/175
[Python] 07.튜플(Tuple) : https://myinfrabox.tistory.com/176
[Python] 09.사전(Dictionary) : https://myinfrabox.tistory.com/178
[Pytho] 10.set : https://myinfrabox.tistory.com/179
[Python] 11.함수(Function) : https://myinfrabox.tistory.com/180
[Python] 12.클래스(Class) : https://myinfrabox.tistory.com/181
[Python] 13.외부 클래스 사용하기 : https://myinfrabox.tistory.com/182
[Python] 14.파일처리 : https://myinfrabox.tistory.com/183
[Python] 15.MySQL Database : https://myinfrabox.tistory.com/184
'Develop > Python' 카테고리의 다른 글
[Pytho] 10.set (0) | 2020.12.30 |
---|---|
[Python] 09.사전(Dictionary) (0) | 2020.12.30 |
[Python] 07.튜플(Tuple) (0) | 2020.12.30 |
[Python] 06.반복문 (0) | 2020.12.30 |
[Python] 05.조건문 (0) | 2020.12.29 |