Python 리스트(List)  공부 

 

리스트 자료형

데이터들의 목록으로 많은 데이터들을 다룰 때 편리하다.

기본적인 사용 방법은 '리스트명(변수) = [요소 1, 요소 2, 요소 3,... , 요소 n]' 같이 사용한다.

리스트는 [ ](대괄호)를 이용한다.

 

 

1. 리스트 만들기

 

a = [] # 요소가 없는 빈 리스트 
b = [1, 2, 3] # 요소가 정수 
c = ["A", "B", "C"] # 문자열 
d = ["A", "B", 1, 2] # 혼합 
e = [1, "A", [2, "B"]] # 혼합 + 리스트 안에 또 다른 리스트 

print(a) 
print(b) 
print(c) 
print(d) 
print(e)
#출력

[] 
[1, 2, 3] 
['A', 'B', 'C'] 
['A', 'B', 1, 2] 
[1, 'A', [2, 'B']]




 

2. 인덱싱, 슬라이싱

 

인덱싱과 슬라이싱은 여러 요소들이 하나로 합쳐진 형태인 경우에 모두 사용하다.

따라서, 문자열이란 하나하나 문자들이 순서대로 나열된 형태이고, 리스트란 하나하나 요소들이 순서대로 저장되는 형태이다.

my_list = ["이몽룡", "홍길동", "임꺽정"]

print(my_list) 
print(my_list[0] + "님") 
# 리스트의 첫 번째 요소가 '문자열'이기 때문에 
# 인덱싱해서 가져온 값은 그대로 '문자열'이다.
#출력

['이몽룡', '홍길동', '임꺽정'] 
이몽룡님

 

1) 인덱싱 사용 비교(문자열 vs 리스트)

문자열 : 모든 요소가 문자이기 때문에 인덱싱하면 '문자'

리스트 : 각 요소의 형태에 따라 인덱싱 결과가 다르다.

 

2) 이중 리스트 인덱싱 (리스트 안에 또 다른 리스트 요소를 가지는 경우)

my_list = ["김철수", "홍길동",["임꺽정", "이몽룡"]] 

print(my_list[2]) # 리스트 
print(my_list[2][1]) # my_list의 3번째 요소인 리스트에서 2번째 요소 '이몽룡' 인덱싱 
print(my_list[2][1][1]) 
# 인덱스 범위 초과, 음수 사용 이런 인덱싱 개념은 동일
#출력

['임꺽정', '이몽룡'] 
이몽룡 
몽

 

a = [2, "2"] 
print(a[0] * 2) 
print(a[1] * 2)
#출력

4 
22 #문자 '2'가 2개 나열된 형태

 

 

3) 슬라이싱

리스트의 요소가 하나 밖에 없어도 슬라이싱의 결과는 무조건 '리스트'이다.

 

a = [2, "2"] 

print(a[0:2]) 
print(a[0:1])
#결과

[2, '2'] 
[2]

 

4) 리스트 연산

a = [1, 2, 3] 
b = [4, 5, 6] 
print("리스트 덧셈 :", a + b) # 연결 
print("리스트 곱셈 :", a * 2) # 반복 

c = a + b 
print(c) #새로운 리스트가 만들어진다.
#결과

리스트 덧셈 : [1, 2, 3, 4, 5, 6] 
리스트 곱셈 : [1, 2, 3, 1, 2, 3] 
[1, 2, 3, 4, 5, 6]

 

 

 

5) 리스트 수정(변경, 삭제)

 

a = [1, 2, 3, 4, 5, 6] 
a[2] = -1 
print("변경 후 :", a)

#결과

변경 후 : [1, 2, -1, 4, 5, 6]

 

# 연속된 범위의 값을 수정 
a[0:2] = [0] 
print("변경 후 :", a) 
a[0:2] = [6, 7, 8] # 하나씩 들어간다. 
print("변경 후 :", a)

만약, a[0:2] = 0 --> 오류, 슬라이싱의 결과는 '리스트' 이기 때문이다.

#결과

변경 후 : [0, -1, 4, 5, 6] 
변경 후 : [6, 7, 8, 4, 5, 6]

리스트 요소 삭제는 del(a[0]), del(a[0:2]) 같이 del()함수를 이용해 요소를 삭제한다.

 

 

6) 리스트 관련 함수

 

append(value) : 리스트 가장 뒤에 value(요소)를 추가

 

 

문자열은 수정이 불가능하기 때문에 새로운 문자열을 만들어내는 함수이다. 즉, 아래 예제에서 a라는 리스트 자체가 변경된다. append함수는 하나의 요소만 추가할 수 있다.

 

a = [1, 2, 3]

a.append(4)

print("변경 후 :", a)
#결과

[1, 2, 3, 4]

 

 

② sort() : 리스트 정렬하기 (숫자, 알파벳 등)

a = [2, 3, 1, 4] 
print("변경 후 :", a)


a.sort() # 기본 오름차순 
print("변경 후 :", a)


a.sort(reverse = True) # 내림차순 
print("변경 후 :", a)
#결과

변경 후 : [2, 3, 1, 4] 
변경 후 : [1, 2, 3, 4] 
변경 후 : [4, 3, 2, 1]

 

③ reverse() : 리스트 뒤집기 (정렬x, 현재 요소를 그대로 뒤집는다.)

a = [1, 3, 2, 4] 
a.reverse() 
print("변경 후 :", a)
#결과

변경 후 : [4, 2, 3, 1]

 

④ index(value) : 리스트에서 value를 찾고, 그 위치를 반환

만약 찾는 값이 없다면, 오류가 발생한다.

 

a = [1, 2, 3] 
print("a에서 2의 위치 :", a.index(2))
#결과

a에서 2의 위치 : 1

 

⑤ insert(index, value) : 지정한 위치(index)에 값(value) 삽입

append함수와 차이는 append함수는 맨 뒤에 값을 추가하고, insert함수는 지정한 위치에 값을 추가한다.

 

⑥ remove(value) : 리스트에서 '처음' 찾은 값(value) 제거

만약 없는 값을 제거하려고 하면 오류가 발생한다.

 

a = [1, 2, 3, 1] 
a.remove(1) 
print("변경 후 :", a)

#결과

변경 후 : [2, 3, 1]

 

또 다른 값을 제거하는 함수로 del() 이 있다. remove함수와 차이는 다음과 같다.

del(a[0]) --> 첫 번째 요소를 제거(0은 순서)
a.remove(0) --> 정수 0을 찾아서 제거 (0은 값)

 

⑦ count(value) : 리스트에 존재하는 value의 개수를 반환

a = [1, 2, 3, 1, 1, 1, 2, 3, 2, 1, 3, 1, 3, 2] 
print("a에서 2의 개수 :", a.count(2)) 
print()

#결과

a에서 2의 개수 : 4

 

⑧ pop(index) : 리스트에서 (index) 번째 값을 '뽑아낸다'

뽑아낸 값을 '반환'해주고 해당된 인덱스의 값은 제거된다.

 

a = [1, 2, 3, 1] 
print(a.pop(1)) 
print("변경 후 :", a) 
print(a.pop()) # index를 사용하지 않으면 기본 '맨 뒤' 값 선택
print("변경 후 :", a)
#결과

2 
변경 후 : [1, 3, 1] 
1 
변경 후 : [1, 3] 

 

⑨ len() : 요소의 개수를 구하는 함수

a = [1, 2, 3, 4] 
b = "1234" 
c = 1234 

print(len(a)) 
print(len(b))

print(len(c)) # 오류

 

#결과

4 
4
오류

 

위의 예에서 a, b는 각각 리스트, 문자열로 어떤 단일 값이 여러 개 존재하는 경우이다. 하지만 c는 단 하나의 숫자이기 때문에 개수를 구할 수 없다. len함수는 값이 여러개 존재하는 자료형만 사용할 수 있다.

 

⑩ copy() : 모든 값들을 '복제'하여 새로운 리스트 생성

a = [1, 2, 3, 4] 
b = a.copy() 
c = a 

print("기존 a :", a) 
print("복제 b :", b) 
print("대입 c :", c)
#결과

기존 a : [1, 2, 3, 4] 
복제 b : [1, 2, 3, 4] 
대입 c : [1, 2, 3, 4]

 

⑪ clear() : 리스트의 모든 요소 제거

a.clear() 
print(a) # 요소만 제거, 빈 리스트가 된다.

#결과

[]

 

⑫ join() : 리스트의 요소들이 모두 '문자열'인 경우에 '하나의 문자열'로 만들 수 있다.

my_list = ["대", "한", "민", "국"] 
print("".join(my_list))

#결과

대한민국
반응형

1.

upper() : 문자열의 영문을 모두 대문자로 변환하여 새로운 문자열을 만든다.
lower() : 문자열의 영문을 모두 소문자로 변환하여 새로운 문자열을 만든다. 

str1 = "I'm a Boy" 
print(str1.upper()) 
print(str1) # 문자열은 수정 불가능해서 원본 그대로
#결과

I'M A BOY 
I'm a Boy

 

2.

title() : 문자열에 존재하는 '영단어'의 첫 글자를 대문자로 변경

str2 = "python python python" 
print(str2.title()) 
print(str2)
#결과

Python Python Python 
python python python

 

3.

strip() : 문자열 좌우측에 존재하는 '공백'을 제거

str3 = "       공 백 제 거       " 
print(str3.strip()) 
# 공백이 아닌 문자를 만날때까지만 공백을 제거
#결과

공 백 제 거 

 

4.

join() : 특정 문자열을 대상 문자열에 삽입

 

# "A".join("BBB") --> "BABAB"

print(".".join("문자열 삽입함수 join()"))
#결과

문.자.열. .삽.입.함.수. .j.o.i.n.(.)

 

5.

count("A") : 문자열에서 "A"의 개수를 반환 (함수의 결과 값이 A의 개수)

 

str3 = "python python python" 
print("str3에서 p의 개수 :", str3.count("p")) 
print("str3에서 py의 개수 :", str3.count("py"))

# 결과 값이 '개수'이기 때문에 숫자 (정수) 
print("str3에서 x의 개수 :", str3.count("x"))
#결과

str3에서 p의 개수 : 3 
str3에서 py의 개수 : 3 
str3에서 x의 개수 : 0

 

6.

replace("A", "B") : 문자열에서 모든 "A"를 찾아서 "B"로 변경

 

str4 = "replace : python python python" 
print(str4.replace("py", "Py")) 
str3 = "       공 백 제 거       " 
print(str3.replace(" ", ""))
#결과

replace : Python Python Python 
공백제거

 

7. 

index("A") : 문자열에서 "A"를 찾고, 그 위치(index) 반환 (찾지 못하면 오류)

--> 찾은 단어의 첫 위치를 반환하고, index함수 안에 넣은 문자를 찾지 못하면 오류가 난다.

 

str5 = "문자열 위치 찾기 (index)" 
print("str5에서 '열'의 위치 :", str5.index('열')) # count처럼 정수 반환 
print("str5에서 '열'의 위치 :", str5.index("index"))
#결과

str5에서 '열'의 위치 : 2 
str5에서 '열'의 위치 : 11

 

print("문자열문자열".index("열")) # 처음 찾은 위치 
print("문자열문자열".rindex("열")) # reverse : 뒤집다 --> 뒤에서부터 찾음

print("문자열문자열문자열".index("열", 3)) # 3번 인덱스부터 찾기 시작
#결과

2 
5 
5 

 

8.

find("A") : index()와 같다. (단, 찾지 못하면 -1이 반환) , index()와 마찬가지로 rfind() 함수가 있다.

 

print("abcdefg".find("a")) 
print("abcdefg".find("z"))
#결과

0 
-1

 

9.

split("A") : 문자열을 기준 문자("A")로 나눈다.

split()에 기준문자를 따로 정해주지 않으면, 기본이 공백, 여백, 개행 등으로 나누어 준다. split함수 결과는 list자료형이다.

 

str6 = "문자열 나누기 (split)" 
print(str6.split())

print(str6.split("기"))
#결과

['문자열', '나누기', '(split)'] 
['문자열 나누', ' (split)']

 

10. 

eval(expression) : 문자열로 표현된 파이썬 식을 인수로 받아 결과값은 내주는 파이썬 내장함수로 문자열로 된 수식을 계산할때 유용하게 사용될 수 있다.

>>> eval('1+2')
3
>>> eval("'hi' + 'a'")
'hia'
>>> eval('divmod(4, 3)')
(1, 1)
반응형

+ Recent posts