Home » 리스트

리스트

(Python) 리스트의 인덱스와 범위를 쉽게 이해하는 방법

리스트의 인덱스는 0부터 시작한다. 사실 많은 프로그래밍 언어에서 배열의 인덱스는 0부터 시작하기 때문에 “맨 첫원소가 0번이고 그 다음은 1번… N번째 원소는 N-1로 참조할 수 있다.”고 외워두면 그리 헷갈리지는 않는다.

그런데 이게 슬라이스 범위 문법에서는 또 헷갈린다. 그 이유는 슬라이스에서 뒤쪽 범위는 포함되지 않기 때문이다. 게다가 파이썬 리스트는 음수 인덱스를 사용해서 뒤에서부터 위치를 지정하는 것도 있다. 자, 첫번째 원소는 0번인데 뒤에서 부터 세면 -1 번부터 시작한다. 그렇다면 -5:-2는 어디서부터 어디까지일까?

더 보기 »(Python) 리스트의 인덱스와 범위를 쉽게 이해하는 방법

파이썬은 처음이라 – 연속열은 처음이라

이번 시간에는 지난 번에 살짝 언급만 하고 넘어갔던 튜플에 대해서 기본적인 내용을 다루겠다. 튜플은 파고 들자면 제법 묵직해질 수 있는 토픽이기는 하지만, 튜플을 활용하는 화려한(?) 기법들은 개인적으로 중급 이상의 과정에 어울린다고 생각하기 때문에 여기서는 간단한 개념과 기본적인 사용법에 대해서만 설명하고자 한다. 튜플은 여러가지 측면에서 리스트와 비슷한 점이 많고, 실제로 리스트와 크게 구분없이 쓰이는 경향이 있는 것도 사실이다. 리스트와 튜플의 공통적인 특성과 이런 특성을 가지는 타입들을 부르는 말인 연속열에 대해서 이야기해보고자 한다. 튜플은 처음이라 튜플은 여러 개의 값을 묶어서 마치 하나의… 더 보기 »파이썬은 처음이라 – 연속열은 처음이라

(연재) 파이썬은 처음이라 – 리스트는 처음이라

지난 시간에 파이썬의 기본적인 값 타입에 대해서 살펴보았는데, 그 때 소개했던 리스트에 대해서 조금 더 자세히 알아보도록 하겠다. 리스트를 엄밀하게 정의하면 “0개 이상의 값의 원소들의 순서있는 집합“이라고 정의할 수 있다. 즉 일종의 집합(collection)이나 컨테이너(container)의 형태로 그 내부에 여러 개의 값을 원소로 가질 수 있으며 다른 언어에서는 배열(Array) 혹은 벡터(Vector)라 불리는 타입과 비슷하다.

리스트는 순서있는 집합이므로 각 원소는 리스트 내부에서 고유한 순서를 가지고 있는데, 이 순서를 인덱스라고 한다. 인덱스는 0부터 시작하는 정수로, 첫번째 원소가 0번 인덱스를 가지며, 길이가 n 인 리스트의 마지막 원소의 인덱스는 n – 1 이다. 리스트의 원소가 될 수 있는 타입의 종류에는 제한이 없으며, C의 배열과는 달리 서로 다른 타입의 원소들이 같은 리스트에 함께 포함될 수도 있다.

더 보기 »(연재) 파이썬은 처음이라 – 리스트는 처음이라

오일러 프로젝트 11

오일러 프로젝트 11번 – 격자내에서의 이웃한 네 수의 곱의 최대값 찾기

이번 문제는 격자를 탐색하는 문제이다.

아래와 같은 20×20 격자가 있습니다.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 <span style="color: #ff0000;">26</span> 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 <span style="color: #ff0000;">63</span> 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 <span style="color: #ff0000;">78</span> 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 <span style="color: #ff0000;">14</span> 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

위에서 대각선 방향으로 연속된 붉은 숫자 네 개의 곱은 26 × 63 × 78 × 14 = 1788696 입니다. 그러면 수평, 수직, 또는 대각선 방향으로 연속된 숫자 네 개의 곱 중 최대값은 얼마입니까? (http://euler.synap.co.kr/prob_detail.php?id=11)

더 보기 »오일러 프로젝트 11

꼬리와 꼬리재귀는 다르다. (Swift)

꼬리재귀 Natasha ElementTypehe Robot에 꼬리재귀에 대한 글이 올라오고 Digg에서 많은 digg을 얻었는데, 좀 이상해서 내용을 정리해본다. 링크한 글의 저자는 꼬리재귀와, 함수형 언어의 자료 구조인 리스트의 head, tail을 혼동하고 있는 듯 하다. 우선 꼬리재귀에 대해서 먼저 이야기하겠다. 꼬리 재귀는 재귀의 특별한 한 형태이다. 꼬리 재귀를 설명하기 전에 먼저 재귀(recursion)에 대해 알아보자. 재귀는 어떤 함수의 내부에서 스스로를 다시 호출하는 것을 말한다. 예를 들어서 1에서 10 까지의 자연수의 합을 구하는 과정을 재귀적인 처리를 통해서 구한다고 생각해보자. 계산은 1 + 2 + 3 +… 더 보기 »꼬리와 꼬리재귀는 다르다. (Swift)

[Python101] Iterable (1) – 리스트

지난 시간 for 문을 설명할 때 다음과 같은 문법이 잠깐 등장했다. for number in range(1,10): 이 구문은 range() 함수를 사용해 만들어지는 1~9 까지의 숫자의 ‘집합’의 개별 원소에 대해 반복적인 명령을 수행하는 구문이라고 했다. 이러한 집합은 사실 영어로 ‘iterable’이라고 하지만 우리말로는 딱히 정확히 대응시킬만한 말이 없다는 것도 이야기했다. 이번 시간에는 이 iterable에 대해서 알아보고자 한다. * 이번 시간은 IDLE의 대화형 쉘을 통해 직접 확인해보면서 배우는 것이 좋다. 지난 시간에서 사용한 ‘집합’이라는 표현이 어찌보면 가장 근접한 표현일 수도 있다. iterable이라는 말은 ‘집합’… 더 보기 »[Python101] Iterable (1) – 리스트