List : 리스트
가변객체(mutable)
[val1, val2, ...] 의 방식으로, 여러개의 값을 함께 모아서 저장할 수 있다.
이때 리스트에 저장되어 있는 값을 요소 element 라고 한다.
리스트는 string 이외에도 number, boolean 등 모든 type 값을 저장할 수 있으며, 서로 다른 type 의 값을 저장하는것도 가능하다.
my_list = [93, 'sua', False, {1, 2, 3}]
다차원 리스트
>>> my_list = [[1, 2, 3], [4, 5, 6], 7, 8]
# 인덱스 0 = [1, 2, 3]
# 인덱스 2 = 7
>>> print(my_list[0][2]) # 인덱스 0 의 인덱스 2
3
List method
리스트 값 추가하기
append
추가하고자 하는 값을 마지막에 추가한다.
>>> my_list = [1, 2, 3]
>>> my_list.append(4)
>>> my_list
[1, 2, 3, 4]
+
추가하고자 하는 element 가 한 개 이상일 때, + 를 사용할 수 있다. + 는 리스트와 리스트를 합쳐준다.
다만 주의할 점은, + 를 사용하여 합쳐준 후 그 합한 값을 다시 저장하고자하는 변수에 지정해주어야 한다는 것이다.
>>> my_list = [1, 2, 3]
>>> your_list = [4, 5, 6]
>>> my_list + your_list
>>> print(my_list)
[1, 2, 3] # 합한 값을 다시 저장해주지 않아 수정되지 않았다.
>>> my_list = my_list + your_list # 이 부분을 해주지 않으면 기존의 리스트는 수정되지 않는다.
print(my_list)
[1, 2, 3, 4, 5, 6] # 더한 값을 다시 지정해주자, 제대로 합해졌다.
insert
입력하고자 하는 인덱스를 지정하여 추가한다.
리스트.insert(인덱스, 값)
리스트.insert(len(리스트), 값) 의 경우, append와 결과가 같다. (len(리스트)는 마지막 인덱스보다 1이 더 큰 값이다)
>>> my_list = [1, 2, 3]
>>> my_list.insert(3, 4)
>>> my_list
[1, 2, 3, 4]
extend
리스트를 연결하여 확장시킨다.
리스트에 여러 요소를 추가하고 싶을 때 append 를 사용하면, 리스트 안에 리스트가 들어가 중첩된다. 단순하게 요소를 추가하고 싶으면 extend를 사용한다.
>>> my_list = [1, 2, 3]
>>> my_list.append([4, 5, 6])
>>> my_list
[1, 2, 3, [4, 5, 6]] # 중첩된다
>>> my_list.extend([7,8,9])
>>> my_list
[1, 2, 3, [4, 5, 6], 7, 8, 9] #요소가 추가된다
중간에 추가하기
리스트[시작인덱스:끝인덱스] 를 이용하되, 시작인덱스와 끝인덱스 값을 같게 지정하면 해당 인덱스의 요소를 덮어쓰지 않으면서 요소 여러 개를 중간에 추가할 수 있다.
>>> my_list = [1, 2, 3]
>>> my_list[1:1] = [4, 5]
>>> my_list
[1, 4, 5, 2, 3]
리스트 값 수정하기 (인덱스를 이용)
>>> my_list = [1, 2, 3, 4]
>>> my_list[3] = 5
>>> my_list
[1, 2, 3, 5]
리스트 값 제거하기
del
제거하고자 하는 인덱스를 지정하여 제거한다.
del 함수[인덱스]
>>> my_list = [1, 2, 3, 4]
>>> del my_list[3]
>>> my_list
[1, 2, 3]
remove(x)
remove(x) 함수는 리스트에서 값이 x와 같은 첫번째 요소를 제거한다.
>>> my_list = [1, 2, 3, 1]
>>> my_list.remove(1)
>>> my_list
[2, 3, 1]
pop
pop(인덱스) 함수는 인덱스에 있는 요소를 삭제한다. 인덱스를 지정하지 않으면 리스트의 맨 마지막 요소를 삭제한다.
>>> my_list = [1, 2, 3, 4]
>>> my_list.pop(2)
>>> my_list
[1, 2, 4]
>>> my_list = [1, 2, 3, 4]
>>> my_list.pop()
>>> my_list
[1, 2, 3]
clear( )
리스트의 모든 요소를 삭제한다. = del list[:]
Slicing
python 에서는 리스트의 일부분을 따로 copy 할 수 있다. 이것을 slicing 이라고 한다. 기억해야 할 점은 'copy' 한다는 것이다. 절대 본 리스트를 수정한다는 의미가 아니다.
steps
list[start : stop : step]
start 부터 stop 지점까지를 step 만큼 이동한 값이다.
stop 지점 앞에서 멈춘다.
>>> my_list = [0, 1, 2, 3, 4, 5, 6]
>>> print(my_list[0 : 3])
[0, 1, 2]
>>> print(my_list[0 : 3 : 2]) # 인덱스 0 ~ 3 사이의 값을 start 부터 2 step 이동한다.
[0, 2]
start 를 빈 칸으로 둘 경우 해당 list 의 첫번째 element 부터 시작한다.
반대로, stop index 를 빈 칸으로 둘 경우 start 부터 끝까지 가져온다.
step 을 비워두면 1 로 본다. = list[start:stop] 과 같다.
>>> my_list = [0, 1, 2, 3, 4, 5, 6]
>>> print(my_list[:3])
[0, 1, 2]
>>> print(my_list[3:])
[3, 4, 5, 6]
>>> print(my_list[0:3])
[0, 1, 2]
할당과 복사
list를 다른 변수에 그냥 할당하게 될 경우, 변수 이름만 다를 뿐 같은 객체가 된다. 즉, 한 쪽의 값이 수정되면 다른 리스트에 영향을 주게 된다. 완전히 별개의 두 list로 만드려면 copy method를 사용해야 한다.
# 단순 할당 시,
>>> a = [1, 2, 3]
>>> b = a
>>> a is b
True
# 이 경우 한 쪽을 수정하면 반대쪽에도 반영된다.
# copy method 사용 시,
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> a == b
True
>>> a is b
False
기타 method
Indexing
>>> my_list = [1, 2, 3, 4]
>>> my_list[3]
4
swap
element 간의 위치를 바꿔준다.
>>> my_list = [1, 2, 3, 4]
>>> list1[0], list1[-1] = list1[-1], list1[0]
>>> my_list
[4, 2, 3, 1]
list.sort( )
123, abc, 가나다 순으로 정렬한다.
>>> my_list = ['banana', 'apple', 'grape', 'pineapple', 'abocado']
>>> my_list.sort()
>>> my_list
['abocado', 'apple', 'banana', 'grape', 'pineapple']
sorted
sort() 함수는 정렬하여 원본 자체를 변형시키는데에 비해, sorted() 함수는 원본이 아닌 출력되는 값을 정렬한다.
>>> a = ['abc', 'abe', 'abcd']
>>> a.sort()
>>> a
['abc', 'abcd', 'abe'] # a 자체를 바꿔버리는 sort() 함수
---
>>> a = ['abc', 'abe', 'abcd']
>>> sorted(a)
['abc', 'abcd', 'abe']
>>> a
['abc', 'abe', 'abcd'] # a 자체엔 변함이 없다.
괄호 안에 iterable 한 자료형을 넣어 해당 자료형의 형태로 정렬할 수 있다.
형태는 sorted(list, 조건)
의 형태인데, 단순히 list 가 아닌 일반 문자열도 들어갈 수 있다. 단, 무조건 list 형식으로 반환된다.
>>> sorted('sooa') # string 을 넣었더니
['a', 'o', 'o', 's'] # list 로 반환한다.
>>> my_dict = {1:2, 3:4}
>>> sorted(my_dict.items())
[(1, 2), (3, 4)]
>>> a = ['abc', 'abe', 'abcd']
>>> sorted(a, reverse=True) # 역순으로 정렬한다.
['abe', 'abcd', 'abc']
>>> sorted(a, key = lambda x: x[1]) # 인덱스 1의 값으로 정렬한다.
['abc', 'abe', 'abcd']
>>> sorted(a, key = lambda x: x[2]) # 인덱스 2의 값으로 정렬한다.
['abc', 'abcd', 'abe']
list.count( )
리스트에 포함된 특정 값의 개수를 센다.
>>> my_list = ['banana', 'apple', 'grape', 'pineapple', 'banana']
>>> my_list.count('banana')
2
len(리스트)
리스트안에 값이 몇개가 있는지 센다.
>>> my_list = ['banana', 'apple', 'grape', 'pineapple', 'banana']
>>> len(my_list)
5
len 을 이용하여 리스트의 첫 번째 값과 마지막 값 구하기
>>> my_list = [2, 3, 4]
>>> length = len(my_list)
>>> X = my_list[0] + my_list[length - 1]
print(X)
6
>>> my_list = ['a', 'b', 'c']
>>> X = len(my_list)
>>> Y = my_list[0] + my_list[X-1]
print(Y)
ac
range(리스트)
숫자 리스트를 만들어주는 함수.
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(1, 5))
[1, 2, 3, 4]
# 리스트 = list(range(시작, 끝, 증가폭))
>>> list(range((-5, 20, 2))
[-5, -3, -1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
# 증가폭을 음수로 넣으면 감소한다.
>>> list(range(20, 5, -2))
[20, 18, 16, 14, 12, 10, 8, 6]
# 시작과 끝을 연결하는 증가폭이 맞지 않으면 빈 리스트가 생긴다.
>>> list(range(-5, 20, -2))
[]
join
리스트에 특정 구분자를 추가하여 문자열로 변환한다.
>>> a = ['1','2','3']
>>> x = "".join(a) # 아무것도 추가하지 않는다
>>> x
'123'
>>> x = "-".join(a) # -를 추가한다
>>> x
'1-2-3'
list comprehension
식, for 반복문, if 조건문을 지정하여 자료 구조를 만드는 것을 comprehension 이라고 한다.
for 반복문으로 리스트 생성하기
[식 for 변수 in 리스트]
= list(식 for 변수 in 리스트)
# 0부터 5 이전까지의 숫자들을 뽑아 리스트로 만든다.
>>> a = [i for i in range(5)]
>>> a
[0, 1, 2, 3, 4]
중첩 for문으로 리스트 생성하기
for가 여러개일 경우 뒤에서 앞의 순서로 처리된다.
작동원리
>>> a = [i * j for j in range(2, 10) for i in range(1, 10)
# 2단부터 구구단이 생성된다
if 조건문으로 리스트 생성하기
[식 for 변수 in 리스트 if 조건식]
= list(식 for 변수 in 리스트 if 조건식)
작동원리
# 0부터 10 이전까지의 숫자들 중 짝수를 뽑아 리스트로 만든다.
>>> a = [i for i in range(10) if i % 2 == 0]
>>> a
[0, 2, 4, 6, 8]
반복문으로 요소 출력하기
인덱스를 지정하여 하나씩 출력하기 번거로울 때 사용한다.
for 반복문
for 변수 in 리스트
>>> a = [93, 5, 17]
>>> for i in a:
print(i)
93
5
17
while 반복문
>>> a = [93, 5, 17]
>>> i = 0
>>>
>>> while i < len(a):
# i가 리스트의 길이(요소 개수) 직전 까지 반복하게 한다.
print(a[i])
i += 1 # 한 번 돌릴때마다 1을 더한다는 뜻
93
5
17
enumerate : 인덱스와 요소 함께 출력하기
for 인덱스, 요소 in enumerate(리스트)
>>> a = [93, 5, 17]
>>> for index, value in enumerate(a):
print(index, value)
0 93
1 5
2 17
# 인덱스를 1부터 시작하게 만들고 싶을 경우
>>> for index, value in enumerate(a, start=1):
print(index, value)
1 93
2 5
3 17
# for index, value in enumerate(a, 1): 라고 써도 된다.
리스트의 활용
가장 큰 수와 가장 작은 수 구하기
largest, smallest
리스트의 숫자들을 비교해서 숫자가 크면(작으면) largest(smallest)로 지정한 i 를 바꾸는 방식
>>> a = [33, 45, 67, 23, 11]
>>> largest = a[0]
>>> for i in a:
if i > largest: # smallest 는 부등호 반대
largest = i
>>> largest
67
min, max
>>> a = [33, 45, 67, 23, 11]
>>> max(a)
67
>>> min(a)
11
요소의 합계 구하기
>>> a = [33, 45, 67, 23, 11]
>>> sum(a)
179
# for 반복문 사용하기
>>> a = [33, 45, 67, 23, 11]
>>> x = 0
>>> for i in a:
x += i
>>> x
179
'python' 카테고리의 다른 글
set (0) | 2021.04.27 |
---|---|
dictionary (0) | 2021.04.27 |
if & while (0) | 2021.04.27 |
기타 함수와 연산자 (0) | 2021.04.27 |
string (0) | 2021.04.27 |