※ 리스트

리스트는 다른 언어의 배열과 같은 역할을 하며 다음과 같이 사용한다.

리스트형 변수 = [요소1, 요소2, ... ]

 

a = [1, 2, ['a', 'b', ['Life', 'is']]]

print(a[-1][-1][0])
print(a[2][2][0])

#--------출력--------#
# 둘 다 Life가 출력됨

 

 

 

※ 리스트 슬라이싱(slicing)

문자열 슬라이싱과 동일한 방법으로 진행된다.

a = [1, 2, 3, 4, 5]

print(a[1:3])   #출력: [2, 3]

 

 

 

 

※ 리스트 연산

§ 리스트 덧셈

a = [1, 2, 3]
b = [4, 5, 6]

print(a+b)

#--------출력--------#
[1, 2, 3, 4, 5, 6]

 

리스트는 같은 자료형의 집합이기에 다른 리스트간의 덧셈을 위해서는 형변환이 필요하다.

이때, str함수는 정수,실수를 문자열형태로 바꿔주는 내장함수이다.

a = [1, 2, 3]

print(str(a[2]) + "hi")   # 3hi

 

 

 

§ 리스트 반복

a = [1, 2, 3]

print(a*3)

#--------출력--------#
[1, 2, 3, 1, 2, 3, 1, 2, 3]

 

 

§ 리스트 길이(len)

a = [1, 2, 3]

print(len(a))   # 3출력

 

 

§ 리스트 수정과 삭제(del)

a = [1, 2, 3]

a[2]=4
print(a)    #출력: [1, 2, 4]

del a[1]
print(a)    #출력: [1, 4]

arr = [1,2,3,4,5]
del arr[2:]
print(arr)  #출력: [1, 2]

 

 

 

 

§ 리스트 복사

a = [1,2,3]
b = a

print(id(a))
print(id(b))

#-----출력-----#
2423373358208
2423373358208

a와 b의 값이 동일함을 알 수 있는데, 이를 아래와 같이 알 수 있다.

a = [1,2,3]
b = a

print(a is b)   # True

따라서 a객체와 b객체가 동일한 주소값을 갖고 있음을 알 수 있기에

 

아래와 같은 양상이 일어날 수 있다.

a = [1,2,3]
b = a

a[1] = 4
print(a)    # [1, 4, 3]
print(b)    # [1, 4, 3]

그렇다면 a값을 가져오지만 a와 다른 주소를 가리키도록 할 수는 없을까?

 

1. slicing 이용

a = [1,2,3]
b = a[:]

a[1] = 4

print(a)    # [1, 4, 3]
print(b)    # [1, 2, 3]

 

2. copy()함수나 copy를 import하여 사용 

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

a[1] = 4

print(a)    # [1, 4, 3]
print(b)    # [1, 2, 3]

 

from copy import copy

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

a[1] = 4

print(a)    # [1, 4, 3]
print(b)    # [1, 2, 3]

 

 

 

 

 

 

 

 

 

 

※ 리스트 관련 함수(append, sort, reverse, index, insert, remove, pop, count, extend)

 

§ 리스트 요소 추가 (append)

a = [1, 2, 3]

a.append(4)
print(a)    # [1, 2, 3, 4] 출력

a.append([5, 6])
print(a)    # [1, 2, 3, 4, [5, 6]] 출력

 

 

§ 리스트 정렬과 뒤집기 (sort ,reverse)

a = [1, 4, 3, 2]

a.sort()
print(a)    # [1, 2, 3, 4] 출력
a = [1, 4, 3, 2]

a.reverse()
print(a)    # [2, 3, 4, 1] 출력

 

 

§ 리스트 위치반환 (index)

a = [1, 4, 3, 2]

print(a.index(4))    # 1출력

 

 

 

§ 리스트 요소 삽입 ( insert(i, x) )

insert(i, x)는 i번째에 x를 삽입하는 함수이다.

a = [1, 4, 3, 2]
a.insert(4, 5)

print(a)    # [1, 4, 3, 2, 5] 출력

 

 

 

§ 리스트 요소 삭제 (remove)

첫 번째로 나오는 값을 삭제

a = [1, 2, 3, 1, 2, 3]
a.remove(2)

print(a)    # [1, 3, 1, 2, 3] 출력

 

 

 

§ 리스트 요소 끄집어내기 (pop)

리스트 마지막 값을 pop(출력 후 삭제)

pop(i)로 i번째 index를 출력 후 삭제

a = [1, 2, 3, 1, 2, 3]

a.pop()
print(a)         # [1, 2, 3, 1, 2] 출력

print(a.pop(2))  # 3출력
print(a)         # [1, 2, 1, 2] 출력

 

 

 

§ 리스트에 포함된 요소x 개수 세기 ( count (x) )

a = [1, 2, 3, 1, 1, 1]

print(a.count(1))   # 4출력

 

 

 

§ 리스트 확장 (extend(리스트))

a.extend(x)에서는 x값은 리스트만 올 수 있으며 원래 리스트 a에 x를 더한다.

a = [1, 2, 3]
b = [4, 5]

a.extend(b)
a.extend([6, 7])
print(a)   # [1, 2, 3, 4, 5, 6, 7] 출력

 

 

 

 

 

 

 

 

 

※ 튜플

리스트와 몇가지를 제외하면 거의 비슷하다.

 

<리스트와 다른점>

- 리스트는 [ ]이고 튜플은 ( )이며 (생략가능) 한 개의 요소만 가질 때는 쉼표가 필요하다.

- 리스트는 값의 생성, 삭제, 수정이 가능

- 튜플은 위와 같은 값의 변경이 불가능하다.

 

따라서 이런 값의 불변성 때문에 평균적으로는 리스트를 더 많이 사용한다.

리스트형 변수 = [요소1, 요소2, ... ]

 

a = [1, 2, ['a', 'b', ['Life', 'is']]]

print(a[-1][-1][0])
print(a[2][2][0])

#--------출력--------#
# 둘 다 Life가 출력됨

 

 

 

※ 튜플의 인덱싱과 슬라이싱(slicing)

a = (1, 2, 'a', 'b')

print(a[0])     # 1출력
print(a[0:3])   # (1, 2, 'a') 출력

 

 

※ 튜플의 덧셈, 곱셈, 길이구하기

t1 = (1, 2, 'a', 'b')
t2 = (3, 4)

print(t1+t2)    # (1, 2, 'a', 'b', 3, 4)
print(t2 * 3)   # (3, 4, 3, 4, 3, 4)
print(len(t1))  # 4 출력

 

+ Recent posts