deque([0], maxlen=3) deque([0, 1], maxlen=3) deque([0, 1, 2], maxlen=3) deque([1, 2, 3], maxlen=3) deque([2, 3, 4], maxlen=3) maxlen=n은 deque의 최대 길이를 n으로 제한합니다. 위의 예제에서 볼 수 있듯이 deque 객체의 길이가 3으로 제한되어서, 오른쪽으로 값이 추가되면 왼쪽에서부터 값이 삭제됩니다. deque 객체의 다양한 메서드의 사용은 아래 페이지에 나와 있습니다.
고랭이 ・ 2020. 8. 19. 18:00 GB 단위의 텍스트를 전처리하다 문득 "리스트에 데이터가 다 안담기면 어떡하지.."라는 생각이 들었습니다. 궁금해서 찾아보니 전혀 걱정할 필요가 없었습니다.. import sys print("{0:,}".format(sys.maxsize)) // 9,223,372,036,854,775,807 컴퓨터마다 다르겠지만, 구글 코랩을 기준으로 약 922경 개를 담을 수 있습니다. 아래는 파이썬 공식 문서에서 볼 수 있는 sys.maxsize 속성에 대한 설명입니다.
파이썬에서 리스트를 생성할 때는 그저 아래와 같이 작성하면 쉽게 리스트가 생성이 된다. list = [] 리스트 길이를 지정하고 0으로 초기화 하고 싶다면 다음과 같이 작성하면 된다. list = [0 for i in range(n)] 0으로 초기화 된 2차원 배열을 만들고 싶다면 다음과 같이 작성하면 된다. matrix = [[0 for col in range(n)] for row in range(n)] 파이썬은 다른 언어에 비해 구현상의 복잡함이 적지만, int 자료형 데이터 갯수에 따른 메모리 사용량
리스트를 여러개 선언하고, 그 중에서 크기가 1000만이상인 리스트가 있다면 메모리 용량 제한으로 풀 수 없게 되는 문제도 가끔있다. 안녕하세요. BlockDMask 입니다. <목차> 1. 파이썬에서 리스트(list)란? 리스트는 데이터들을 잘 관리하기 위해서 묶어서 관리할 수 있는 자료형 중의 하나 입니다. 우리는 이걸 보고 리스트가 점검하거나 기억하기 쉽도록 특별한 순서로 적어놓은 것. 이라는 것을 알 수 있고, 이걸 프로그래밍 언어 차원에서 본다면 데이터들을 잘 관리할 수 있도록 순서를 정해서 관리하는 데이터 타입의 하나 이다. 라고 생각하면 되겠습니다. 리스트 자료형 혹은 배열을 말할때 항상 교수님들은 이런예제를 사용했었습니다. 이게 지금은 열두개라서 그래도 사람손으로 해도 가능은 하지만, 동
수가 많아지고 호수도 더 많아진다면 100개 1000개 의 변수를 하나하나 일일히 만들수는 없지 않을까요? 어떤가요? 여전히 호수는 일일히 쳐야하지만, 변수가 12개가 생기는게 아니라 리스트 타입의 변수 딱 1개만 만들어서 묶어서 처리할 수 있게 되었죠? 101부터 1201 까지 치는것도 비효율적으로 보인다 싶다면. 그럼 101, 201처럼 규칙이 있는 자료형은 for 반복문이나 while 반복문을 통해서 자료형을 또 넣거나 할 수 있겠죠? 또한, 리스트는 시퀀스 데이터라고 합니다. 시퀀스라는 것은 데이터에 순서가 존재한다는 뜻입니다. 그렇기 때문에 우리는 리스트 안에 있는 데이터를 순서대로 접근이 가능하고, index를 이용해서 리스트[몇번지=index]에 한번에 접근가능하기도 합니다. > 리스트를 만드는 방법 파이썬에서 리스트는 아래와같은 생김새를 가지고 있습니다. 리스트변수이름 = [요소1, 요소2 ...] 이렇게 대괄호 안에 요소들이 순서대로
존재하고 있습니다. 파이썬에서 리스트를 만드는 방법은 2가지가 존재합니다. >대괄호를 이용하는 방법 a = [1, 2, 3, 4, 5] 이렇게 대괄호를 이용해서 리스트를 만들 수 있으며, 리스트 내부에 값은 스트링이 오든, 숫자가 오든 데이터 타입이 통일되지 않아도 상관없습니다. > list()를 이용한 방법 d = list() 이렇게 list()를 이용해서 리스트를 만들수 있습니다. 하지만, 이것은 비어있는 리스트만 뜻하게 됩니다. 2. 파이썬 리스트의 덧셈, 곱셈, 값 변경에 대해서 > 덧셈 - 리스트를 붙인다. 덧셈 연산자 + 를 이용해서 리스트끼리 덧셈을 할 수 있습니다.
이렇게 리스트 a ['BlockDMask', 333] 와 리스트 b [1,2,3]을 더하면 하나의 또다른 리스트인 ['BlockDMask', 333, 1, 2, 3]이 생성되는 것을 알 수 있습니다. 아래 설명할 리스트의 extend 함수와는 다릅니다. > 곱셈 - 리스트를 반복한다 곱셈 연산자 * 를 이용해서 리스트를 곱할 수 있습니다.
이렇게 리스트를 n번 곱하게 되면 n번 만큼 리스트를 앞에서 부터 뒤까지 반복해서 새로운 리스트를 만들어 줍니다. 3. 파이썬 리스트의 인덱싱과 슬라이싱에 대해서 > 리스트 인덱싱1 : 리스트 검색, 접근 파이썬의
리스트는 시퀀스 데이터 타입이기 때문에 인덱스를 이용해서 접근을 할 수 있습니다. 간단하게 예제를 보면 아 그리고!
결과 값을 보면 길이가 8인 리스트에서 접근 할 수 있는 인덱스는 그럼 정리를 해보면 > 리스트 인덱싱2 : 리스트 값 수정 우리는 위에서 배운 인덱싱을 가지고 리스트의 특정 요소의 값을 수정할 수 있습니다. 정리해보면 이런식으로 가능하겠죠? 예제로 한번 보겠습니다.
이렇게 인덱스를 이용해서 리스트의 값을 변경할 수 있습니다. 간단하죠? > 리스트 슬라이싱 : 리스트 자르기 리스트 슬라이싱이라는것은 리스트를 잘라버린다는것 입니다. 리스트를 다루다 보면 필요한 부분만 잘라서 쓰고 싶고, 필요없는 부분은 잘라 내야하는 경우가 있습니다. 파이썬에서는 슬라이싱을 [] 대괄호에서 콜론 : 을 이용해서 진행을 합니다. 리스트 a = [100, 101, 102, 103, 104] 라는것이 존재하고, 우리는 101번부터 103번까지의 값만 필요하다고 했을때. 어 근데 a[1:3]이 아니라 a[1:4]네요? 그럼 a[1]부터 ~ a[3] 까지 자른다는 것을 a[1:4] 까지로 표현을 하는걸 보면 뒤에있는 :4는 포함하지 않는 구간이라는 거네요. 정리를 해보면 그럼 슬라이싱 중에 [:], [:M], [M:] 이렇게 앞뒤를 생략한것들은 무슨 뜻인지 예제에서 확인해보겠습니다.
결과 확인 결과를 보시면 2. 슬라이싱을 할때 맨 앞을 비워둔다면 a[:M] 이렇게 표현할 수 있으며 이는 아래의 식을 말합니다. 3. 뒤를 비워두는 a[N:] 이런 식이라면 4. a[:] 이처럼 양쪽을 비워서 슬라이싱을 한다는 것은 리스트 전체를 복사하는것과 동일합니다. 5. 예제 마지막을 보시면 음수 index도 슬라이싱을 할 수 있다는걸 볼 수 있습니다. 4. 파이썬 리스트의 길이, 삭제에 대해서 > len 함수 - 리스트의 길이를 구하는 함수 내장함수 len을 이용해서 리스트의 길이를 구할 수
있습니다.
결과값. > del 함수 - 리스트의 특정 요소 혹은 리스트 특정 범위를 삭제 del(리스트 범위 or 리스트 특정 요소) 리스트 슬라이싱을 이용해서 리스트에서 특정 범위 만큼을 삭제할 수
있습니다.
결과를 보시면 del() 함수를 이용해서 리스트의 특정 범위를 삭제하거나, 특정 값을 삭제 할 수 있음을 확인 할 수 있습니다. 이 상태에서 del(c[1:4]) 를 하게 되니 1~3 인덱스인 300, 400, 500 값이 삭제되어 ** len 함수와 del 함수는 리스트 전용으로만 딱 쓸수있는 함수가 아니라, 다른 객체에도 사용할 수 있는 파이썬 내장 함수 입니다. 5. 리스트 메서드 append, insert, remove, pop, extend list.append(x) - 리스트에 값 추가 리스트의 append 함수를 이용해서 리스트의 끝에 값 x를 추가하는 함수 입니다.
list.insert(a, b) - 특정 위치에 값 추가 리스트의 a위치에 b 값을 추가하는 함수 입니다.
list.remove(x) - 리스트에서 특정 값 제거 리스트에서 특정 값 x를 찾아서 제거하는 함수입니다.
결과를 보셨듯 list.pop() - 리스트 맨 마지막 값 반환 후 삭제 리스트에 있는 맨 마지막 값을 반환한 후에 리스트에서 해당 값을 삭제하는 함수 입니다.
a.pop()이 불릴때 마다 리스트 맨 뒤에 있는 값이 사라지고, 해당 값은 a.pop의 반환값으로 되는것을 확인할 수 있습니다. list.extend(list2) - 리스트에 다른 리스트2 연결 리스트1에 리스트2를 붙이고 싶을때 사용하는 함수 입니다.
list1.extend(list2) 리스트 +
연산자와 extend의 다른점은 하지만 6. 파이썬 메서드 copy, reverse, sort, count, index, clear list.copy() - 리스트 복사 리스트를 복사할 수 있는 함수 입니다. 복사한 리스트를 반환하는 함수 입니다.
list.reverse() - 리스트 뒤집기 리스트의 내부 요소들을 싹 뒤집습니다.
list.sort() - 리스트 정렬 리스트의 내부 요소를 정렬해주는 함수입니다. sort 함수에서 주의해야할 것은 내부 요소의 데이터 타입이 같아야합니다. 그럼 이제 예제로 한번 살펴볼까요?
결과값으로 보셨듯, 그렇지만
int, string 타입이 섞여있는 c 리스트는 에러가 난 것을 볼 수 있습니다. list.count(x) - 리스트 값 x 의 개수 세기 리스트 내부에 매개변수로 전달받은 x와 같은게 몇개가 있는지 세서 그 개수를 반환하는 함수 입니다.
list.count(x) 함수에 인자로 찾고 싶은 것을 넣으면 개수를 잘 반환해주는걸 볼 수 있습니다. list.index(x) - 리스트 값 x의 위치(index) 값 반환 리스트 내부에 값 x의 위치를 index 로 반환하는 것 입니다.
결과 값을 보셨듯 그렇지만 만약에 리스트 내부에 찾고자 하는 x가 없는 경우 에러가 발생하게 됩니다. list.clear() - 리스트에 저장된 모든 값 삭제 리스트 내부에 존재하는 모든 값들을 삭제 합니다.
이렇게 clear() 함수를 이용하면 리스트 내부에 있는 모든 값들을 삭제하여, 빈 리스트가 됩니다. 7. 파이썬 리스트 깊은 복사과 얕은 복사에 대해서 깊은 복사는 말 그대로 복사를 해서 각각 독립적인 리스트가 되는것이고 리스트 a가 있었고 a를 복사한 리스트 b가 있다고 했을때 좀더 깊게 이야기하면 예제에서 한번 확인해 볼까요?
결과 값 확인 얕은 복사는 = 대입으로 진행을 하고 얕은 복사를 진행한 리스트 a, b는 주소값이 동일한것을 볼 수 있으며, 그렇기 때문에 리스트 b의 값을 변경했을때 리스트 a의 값도 변경된 것을 볼 수 있습니다. 깊은 복사를 진행한 리스트 c, d, e는 각각 주소값이 다른것을 볼 수 있습니다. 저는 얕은 복사 깊은
복사가 반대로 외워져서 이런방식으로 생각하고 있습니다. 이번 포스팅은 매우매우 길었네요. 간만에 길어서 오래 걸렸습니다. 2장으로 나누지 않고 진행 하려 했는데, 어쩔수 없이 나누어 졌습니다. 이번 포스팅에서는 파이썬 기본에서 이정도의 리스트 정보, 사용법은 딱 알고 넘어가시면 좋을것 같습니다. 감사합니다. 힘들게 작성한 만큼 글을 읽은 분들께 도움이 되었으면 좋겠습니다. |