· List
리스트 타입의 자료는 순서성을 갖고, 각각의 요소 값들을 수정이 가능하며 중복된 요소를 갖을 수 있다.
여기서 순서성이 있다는 것은 인덱싱과 슬라이싱이 가능하다는 것이다. 순서성이란 요소값들은 자신의 위치에 순서가 있다는 뜻이다.
리스트는 숫자나 문자들의 하나의 집단으로 만들 경우 간단히 표현이 가능하다.
<예제>
a = [] # 비어있는 리스트
b = [1, 2, 3] # 숫자를 담은 리스트
c = ["아버지", "어머니", "나"] # 문자를 담은 리스트
d = [1, 2, "apple", "samsung"] # 복합적 요소인 리스트
print(a); print(b); print(c); print(d) # 한 줄에 명령어를 쓸 때는 ';'를 구분으로 입력한다.
<결과>
[] [1, 2, 3] ['아버지', '어머니', '나'] [1, 2, 'apple', 'samsung'] |
· list의 인덱싱과 슬라이싱
리스트 역시 일반 문자열처럼 인덱싱, 슬라이싱이 가능하다.
<일반 문자열에서의 인데싱과 슬라이싱>
e = "I like rainy weather."
print(e[3]); print(e[2:6])
<일반 문자열의 인뎅싱 슬라이싱 결과>
i like |
<리스트 타입의 인뎅싱과 슬라이싱>
c = ["아버지", "어머니", "나"]
print(c[1]) # 1번째 자리에 있는 요소의 데이터를 추출
print(c[1:3]) # 1번째부터 2번째 자리에 있는 데이터를 추출
print(c[0:]) # 처음부터 끝까지
print(c[:2]) # 처음부터 1번째 자리 데이터 까지
print(c[0] + "가 좋아? 아니면 " + c[1] + "가 좋아?")
# 위에 코드처럼 복합적으로 문자와 섞어서 문자열의 연사자 합으로 출력이 가능하다
# 리스트 자료의 수정
c[0] = "아빠상어"
print(c)
# 리스트 자료의 삭제
del c[2]
print(c)
<결과>
['어머니', '나'] ['아버지', '어머니', '나'] ['아버지', '어머니'] 아버지가 좋아? 아니면 어머니가 좋아? ['아빠상어', '어머니', '나'] ['아빠상어', '어머니'] |
· 리스트 관련 함수
(1) append - 리스트에 요소 값 추가
<예제>
c = ["아버지", "어머니", "나"]
# 리스트 자료를 추가
c.append([1, 2, 3])
c
print(c)
# 문자열 추가
c.append("삼촌")
print(c)
# 집합 형태도 추가가 가능하다.
c.append({1,2})
print(c)
<결과>
['아버지', '어머니', '나', [1, 2, 3]] ['아버지', '어머니', '나', [1, 2, 3], '삼촌'] ['아버지', '어머니', '나', [1, 2, 3], '삼촌', {1, 2}] |
※ 이중, 삼중 리스트 자료를 출력하는 방식도 있다.
<예제>
f = [1, 2, [3, 4, [5, 6]]]
print(f)
print(f[2][2][1])
<결과>
[1, 2, [3, 4, [5, 6]]] 6 |
출력문을 보면 컴퓨터는 0부터 숫자를 세기 때문에 리스트의 0번째 데이터는 1이다.
여기서 2번째 데이터는 [3, 4, [5, 6]]이다. 또 그 데이터의 [0] 번째는 5, [1]번째는 6이다.
그러므로 2번째 위치의 자료의 2번째 위치 자료의 1번째 위치에 있는 "6"이 나오게 되는 것이다.
(2) sort - 리스트의 요소 값의 정렬
<예제>
g = [1, 32, 2, 5, 4, 4, 50]
print(g)
# 정렬 기본적으로 오름차순이다.
g.sort()
print(g)
# 역순 : 내림차순으로 정렬
g.sort(reverse = True)
print(g)
<결과>
[1, 32, 2, 5, 4, 4, 50] [1, 2, 4, 4, 5, 32, 50] [50, 32, 5, 4, 4, 2, 1] |
(3) index - 리스트의 요소 값의 위치를 반환한다.
<예제>
g = [1, 32, 2, 5, 4, 4, 50]
print(g.index(4))
<결과>
4 |
4라는 숫자가 처음 위치한 4번째 요소 값의 자리 위치가 출력되었다.
(4) insert - 리스트의 요소 값 삽입
<예제>
g = [1, 32, 2, 5, 4, 4, 50]
g.insert(1, 123)
print(g)
g.insert(2, [1, 2])
print(g)
<결과>
[1, 123, 32, 2, 5, 4, 4, 50] [1, 123, [1, 2], 32, 2, 5, 4, 4, 50] |
insert(추가하고 싶은 위치, 추가할 값)
(5) remove - 리스트의 요소 값 제거
<예제>
g = [1, 32, 2, 5, 4, 4, 50]
g.remove(32)
print(g)
<결과>
[1, 2, 5, 4, 4, 50] |
remove(요소 값) : 요소 값을 삭제한다. remove는 자릿 수로 분간하지 않고 요소 값으로 분간한다.
(6) pop - 리스트의 요소 값을 끄집어내기
<예제>
g = [1, 32, 2, 5, 4, 4, 50]
g.pop() # 마지막 값만 제외한다.
print(g)
g.pop(2)
print(g) # 0부터 시작해서 2번째에 위치한 값을 끄집어 낸다.
<결과>
[1, 32, 2, 5, 4, 4] [1, 32, 5, 4, 4] |
(7) count - 리스트의 요소 값 x의 개수 세기
<예제>
g = [1, 32, 2, 5, 4, 4, 50]
print(g.count(4))
<결과>
2 |
count(요소 값) : 개수를 알고자 하는 요소 값을 입력하면 요소 값의 개수가 출력된다.
(8) extend - 리스트 확장
<예제>
g = [1, 32, 2, 5, 4, 4, 50]
g.extend(["탐리엘", "스카이림"])
print(g)
<결과>
[1, 32, 2, 5, 4, 4, 50, '탐리엘', '스카이림'] |
extend("리스트 자료") : extend는 오직 리스트만을 받을 수 있으며 원 자료에 추가하여 하나의 리스트로 만들어 준다.
· id()를 통한 변수 복사 과정
id() 명령어를 이용하면 객체의 주소를 알 수 있게 해준다.
또 한 데이터를 복사하는데 있어 얕은 복사, 깊은 복사가 존재한다. 여기서 id()를 통해 복사 방법에 대한 차이가 존재한다.
<예제>
복사한 데이터의 출력 결과를 확인
family = ['아빠', '엄마', '나', '동생']
print(family)
# 얕은 복사
family2 = family
print(family); print(family2)
# 깊은 복사
import copy
family3 = copy.deepcopy(family)
print(family); print(family3) # 같은 값이 출력되는 것을 알 수 있다.
<결과>
['아빠', '엄마', '나', '동생'] ['아빠', '엄마', '나', '동생'] ['아빠', '엄마', '나', '동생'] ['아빠', '엄마', '나', '동생'] ['아빠', '엄마', '나', '동생'] |
출력 결과가 모두 동일한 것을 알 수 있다. 하지만 여기서 얕은 복사와 깊은 복사의 차이점은 다음과 같다.
<예제>
얕은 복사와 깊은 복사의 차이
# 얕은 복사
print(id(family)); print(id(family2)) # id가 똑같은 것을 확인할 수 있다.
# 깊은 복사
print(id(family)); print(id(family3))
<결과>
2253358257152 2253358257152 2253358257152 2253359427840 |
얕은 복사의 경우 두 id 주소가 똑같다. 하지만 깊은 복사는 두 id 주소가 다른 것을 확인할 수 있다.
이것은 얕은 복사의 경우 복사본이 변경 또는 수정이 되면 원본의 데이터도 수정이 된다는 것이다.
하지만 깊은 복사의 경우 두 주소가 다르기 때문에 복사본이 수정 되어도 원본에는 영향이 없다는 뜻이다.
'파이썬(Python)' 카테고리의 다른 글
Dictionary 자료 (0) | 2021.06.09 |
---|---|
Tuple 자료 (0) | 2021.06.06 |
문자열과 관련된 함수 (0) | 2021.06.05 |
문자형 자료(인덱싱, 슬라이싱, 포매팅) (0) | 2021.05.24 |
숫자형 , 연산자, Print 함수의 서식과 자료 형식 및 이스케이프(탈출) 문자 (0) | 2021.05.24 |