본문 바로가기

Programming Language/Python

Ⅱ. 자료형 (3. 리스트)

  • 리스트(List) = 여러 요소들의 집합을 저장하는 자료형.

# 새로운 원소를 추가하거나 갱신, 삭제하는 일이 가능하며 리스트 요소들은 값을 변경할 수 있는 Mutable한 데이터 타입입니다.

 

개념 형태
리스트(List)
A = [a,b,c]
A = list(B)

A = 리스트
B= iterable 데이터
변수에 여러개의 데이터를 저장한 것.
# list() 형태를 사용할 때에는 반드시 () 안에는 iterable한 데이터(튜플, 딕셔너리,문자열, 집합)를 사용해야함.
Iterable = 반복가능한. → 원소를 하나씩 쪼개어 차례로 반환할 수 있는 객체.(문자열, 리스트, 튜플, 딕셔너리) Iterable한 객체는 for문제 하나씩 사용 가능함.
a = [3,'BTS','강']
print(a)

[3, 'BTS', '강']

 

 

 

 

3-(1) 리스트의 기본 특징

  • []를 한 줄로 인식

: 줄을 바꿔도 []는 한줄로 인식합니다.

 

a = [3,
     'BTS',
     '강']
print(a)

[3, 'BTS', '강']

 

 

  • 인덱스(Index)

: 자동으로 번호, 순서(인덱스)를 부여합니다.

 

a = [3,'BTS','강']    # a=[인덱스0, 인덱스1, 인덱스2]
print(a[1])           # 두번째 데이터(인덱스=1)를 출력해.

BTS

 

  • 인덱스 -1

: 리스트 마지막 데이터의 인덱스는 -1과 같습니다.

 

a = [3,'BTS','강']
print(a[-1])

 

  • 비어있는 리스트

: 비어있는 리스트를 만드는 방법은 2가지가 있습니다.

① a = []

② a= list()

 

  • 리스트 속 리스트

: 리스트 안에 리스트를 저장할 수 있습니다.

 

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

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

[3, 4, 5]

4

 

 

 

 

3-(2) 리스트 데이터 일부 자르기(Slicing)

 

개념 형태
슬라이싱
(Slicing)

A[n : m]

A = 리스트
[n : m] = n ~ m-1
[n :] = n ~ 끝
[: m] = 처음 ~ m-1
리스트의 데이터를 잘라서 리스트 형식으로 반환해.
 
A [n : m : k]

A = 리스트
k = 간격
리스트 A에서 n~m-1 범위의 데이터를 k간격으로 슬라이싱해.
단, k의 부호는 출발 방향(+는 왼쪽부터 / -는 오른쪽부터)

a = [3,'BTS','강']
print(a[0:2])    # print(a[ : ]) = [3,’BTS’,’강’]

[3, 'BTS']

# 슬라이싱 0은 생략가능힙니다.

 

a = [1,2,3,4,5,6]
b = a[0:4:2]
c = a[4:0:-1]    # 4~1 데이터를 오른쪽부터 1간격으로 슬라이싱
print(b)
print(c)

[1, 3]

[5, 4, 3, 2]

 

 

문자열 슬라이싱과 리스트 슬라이싱

  • 문자열 Slicing ⇒ 반환값 = 문자열(str)
a = 'abc'
print(a[0])
print(type(a[0]))
print(a[0:1])
print(type(a[0:1]))

a

<class 'str'>

a

<class 'str'>

 

  • 리스트 Slicing ⇒ 반환값 = 리스트(list)
a = [0,1,2]
print(a[0])
print(type(a[0]))
print(a[0:1])
print(type(a[0:1]))

0

<class 'int'>

[0]

<class 'list'>

 

 

 

 

3-(3) 리스트 연산

리스트 더하기

: '+' 연산자를 이용해 두 리스트를 연결합니다.

 

a = [1,2,3]
b = [3,4,5]
print(a+b)

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

 

 

  • extend
함수 내용
이름 extend
설명 리스트A 뒤에 리스트B를 붙여 확장해.
형태 A.extend(B)
인자 A,B = 리스트
반환 return 리스트
a = [1,2,3]
b = [3,4,5]
a.extend(b)
print(a)

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

 

 

리스트 곱하기

: '*' 연산자를 이용해 해당 리스트를 반복합니다.

 

a = [1,2,3]
print(a*3)

[1, 2, 3, 1, 2, 3, 1, 2, 3]

 

 

 

 

3-(4) 리스트 수정

① 인덱스로 하나의 값 수정하기

 

a = [1,2,3]
a[2]=4
print(a)

[1, 2, 4]

 

 

② 슬라이싱으로 연속된 범위의 값 수정하기

 

a = [1,2,3]
a[1:2] = ['a','b','c']
print(a)

[1, 'a', 'b', 'c', 3]

 

 

리스트 데이터 추가하기

  • append
함수 내용
이름 append
설명 a 데이터를 리스트 제일 마지막에 추가해.
형태 A.append(a)
인자 A = 리스트
a = 추가할 데이터
반환 반환없음.
a=[1,2,4]
a.append(8)    # 8을 a리스트 제일 마지막에 추가해.
print(a)

[1, 2, 4, 8]

 

 

  • insert
함수 내용
이름 insert
설명 a 데이터를 인덱스n 데이터 앞에 추가해.
형태 A.insert(n,a)
인자 A = 리스트
n = 추가할 인덱스 위치
a = 추가할 데이터
반환 반환없음.
a=[1,2,4]
a.insert(2,8) # 8을 a리스트 인덱스2 앞에 추가해.  
print(a)

[1, 2, 8, 4]

 

 

리스트 데이터 삭제하기

  • pop
함수 내용
이름 pop
설명 n 인덱스에 위치한 데이터를 밖으로 빼.
형태 A.pop(n)
인자 A = 리스트
n = 삭제할 데이터의 인덱스
반환 return A[n]
a=[1,2,4]
a.pop(0)
print(a)

[2, 4]

 

① pop() = pop(마지막 인덱스 번호)

a=[1,2,4]
a.pop()
print(a)

[1, 2]

 

② 밖으로 뺀 데이터를 다른 곳으로 저장 가능

a=[1,2,4]
b=a.pop(0)
print(a)
print(b)

[2, 4]

1

 

 

  • remove
함수 내용
이름 remove
설명 리스트 A 안에 x데이터를 삭제해.
단, x데이터가 여러개일 경우 제일 첫 번째로 등장하는 x만 삭제함.
형태 A.remove(x)
인자 A = 리스트
x = 삭제할 데이터
반환 반환없음.
a = [1,2,3,1,2,3]
a.remove(3)
print(a)

[1, 2, 1, 2, 3]

 

 

  • 빈 리스트 사용
함수 내용
이름 빈 리스트 사용
설명 n:m 범위의 데이터를 빈 리스트 []로 대체해.
형태 A[n:m] = [ ]
인자 A = 리스트
n:m = 삭제 범위
반환 반환없음.
a = [1,2,4]
a[1:2] = []
print(a)

[1, 4]

 

a = [1,2,4]
a[1] = []
print(a)

[1, [], 4]

# 빈 리스트 []로 대체하고자 하는 데이터를 인덱스로 표현하면 []가 삽입됩니다.

 

 

  • del
함수 내용
이름 del
설명 리스트 A의 인덱스 n에 해당하는 데이터 또는 n”m 범위의 데이터를 삭제해.
형태 del A[n]
del A[n:m]
인자 A = 리스트
n = 삭제하고자 하는 데이터의 인덱스
n:m = 삭제하고자 하는 데이터 범위
반환 반환없음.
a = [1,2,4]
b = [5,6,7]
del a[1]
del b[0:2]
print(a)
print(b)

[1, 4]

[7]

 

 

 

 

3-(5) 리스트 관련 함수

  • len
함수 내용
이름 len
설명 A 리스트의 길이를 반환해줘.
형태 len(A)
인자 A = 리스트
반환 return 숫자(정수)
a = [1,2,3]
print(len(a))

3

 

 

  • reverse
함수 내용
이름 reverse
설명 A 리스트의 데이터의 순서를 반대로 뒤집어.
형태 A.reverse()
인자 A = 리스트
반환 return 리스트
a = [1,2,4]
a.reverse()
print(a)

[4, 2, 1]

 

 

  • sort
함수 내용
이름 sort
설명 A 리스트의 데이터의 순서를 오름차순으로 정렬해.
단, 문자는 사전순으로 정렬.

A 리스트의 데이터의 순서를 내림차순으로 정렬해.
단, 문자는 사전 역순으로 정렬.
형태 A.sort()
A.sort(reverse=True)
인자 A = 리스트
반환 return 리스트
a = [1,2,4]
a.sort(reverse=True)
print(a)

[4, 2, 1]

 

 

  • index
함수 내용
이름 index
설명 A 리스트에 x 값이 있으면 x의 인덱스를 반환해줘.
단, 리스트 A 안에 x값이 없으면 Error
형태 A.index(x)
인자 A = 리스트
x = 찾고자하는 데이터값
반환 return 숫자(정수)
a = [1,2,3]
print(a.index(2))

1

 

 

  • count
함수 내용
이름 count
설명 리스트 A 안에 데이터x가 몇개 포함되어 있는지 반환해줘.
형태 A.count(x)
인자 A = 리스트
x = 세고자 하는 데이터
반환 return 숫자(정수)
a = [1,2,1,2,3]
print(a.count(1))

2

 

 

 

 

3-(6) 리스트 내포

  • 리스트 내포 (LIst comprehension) = 조건문(for문, if문)을 리스트 안에 배치하여 조건문의 반환값을 원소로 하는 리스트를 생성하는 방법.
개념 형태
리스트 내포
List = [A 조건문1 조건문2 조건문3...]
        = [A 조건문1 
                조건문2
                 조건문3
                 …]

A = 반환값
조건문1의 조건문2를 실행한 A의 반환값을 원소하는 리스트를 만들어.

ex1) 리스트 내포 사용X

meter = [3, 7, 9, 10]
centi_meter = []
for i in meter :
    if i%2 != 0 :    
        centi_meter.append(100*i)
print(centi_meter)

[300, 700, 900]

 

ex1) 리스트 내포 사용O

meter = [3, 7, 9, 10] 
centi_meter = [100*i for i in meter if i%2 != 0] 
print(centi_meter)

[300, 700, 900]

 

ex2) 리스트 내포 사용X

num = [1,2,3,4,5]
result = []
for n in num:
  if n%2 == 1:
    if n < 4:
      result.append(n*10)
print(result)

[10, 30]

 

ex2) 리스트 내포 사용O

num = [1,2,3,4,5]
result = []
result = [n*10 for n in num 
          if n%2 == 1 
          if n < 4]
print(result)

[10, 30]

 

위와 같이 리스트 내포를 사용하면 가독성은 떨어지지만 훨씬 짧은 코드로 내용을 담을 수 있습니다. 짧고 간결한 코드는 알고리즘의 실행 속도와 효율성을 의미하므로 매우 중요한 부분입니다. 리스트 내포를 사용하지 않았을 때와 사용했을 때의 실행 속도 차이는 다음과 같습니다.

 

리스트 내포 사용X 실행시간

import time
first_time=time.time()
meter = [3,7,9,10]*999999
centi_meter=[]
for i in meter:
  if i%2 != 0:
    centi_meter.append(100*i)
last_time=time.time()
time_imterval = last_time-first_time
print("실행 시간: "+str(time_imterval))

실행 시간: 0.9592478275299072

 

 

리스트 내포 사용O 실행시간

import time
first_time=time.time()
meter=[3,7,9,10]*999999
centi_meter=[100*i for i in meter if i%2 != 0]
last_time=time.time()
time_imterval = last_time-first_time
print("실행 시간: "+str(time_imterval))

실행 시간: 0.559654951095581

 

 

 

 

 

*참고 : 점프 투 파이썬

'Programming Language > Python' 카테고리의 다른 글

Ⅱ. 자료형 (5. 딕셔너리)  (0) 2022.08.29
Ⅱ. 자료형 (4. 튜플)  (0) 2022.08.22
Ⅱ. 자료형 (2. 문자열)  (0) 2022.05.28
Ⅱ. 자료형 (1. 숫자형)  (0) 2022.04.27
Ⅰ. Python의 이해 (5. 파이썬 개발환경)  (0) 2022.04.24