Latest web development tutorials

Python3 데이터 구조

이 장은 주로 파이썬 데이터 구조를 소개하기 이전에 배운 지식과 결합된다.


명부

, 목록은 변경 될 수 있지만 문자열과 튜플 수 없습니다 : 파이썬 목록은 가장 중요한 기능은 문자열과 튜플, 즉 한 문장 구별되는 변수입니다.

다음은 파이썬의 목록은 다음과 같습니다

방법 기술
list.append (X) (A)에 상응하는 목록의 단부에 항목을 추가하여 [LEN (a)] = [X].
list.extend (L) = L. : 지정된리스트의 모든 원소를 첨가함으로써, [LEN (a)]의 상응하는 목록을 확장
list.insert (난, 배) 지정된 위치에 항목을 삽입합니다. 첫 번째 파라미터는 a.insert 같은 요소 앞의 인덱스에 삽입되는 (0, x)의 전체 목록 앞에 삽입되지만 a.insert (렌 (A), X) (a.append 동등 배).
list.remove (X) 값 x는 목록의 첫 번째 요소를 제거합니다. 이러한 요소가없는 경우, 에러를 반환한다.
list.pop ([I]) 이 목록에 지정된 위치에서 요소를 제거하고이를 반환합니다. 인덱스, a.pop를 지정하지 않으면 () 마지막 요소를 반환합니다. 즉시 요소리스트로부터 제거 하였다. (제 i 주위에 대괄호의 방법은 매개 변수는 대괄호를 입력해야합니다, 당신은 종종 파이썬 라이브러리 참조에서이 표기법을 볼 수없는, 선택을 나타냅니다.)
이 list.clear () 델 A와 동일한 목록에있는 모든 항목 삭제 [이 :].
list.index (X) 첫 번째 요소의 X의 값이 목록의 인덱스를 돌려줍니다. 일치하는 요소가 오류를 반환하지 않습니다.
list.count (X) 시간 (X)의 개수가리스트에 나타나는 반환.
list.sort () 리스트의 요소에 정렬된다.
list.reverse () 목록에서 반전 요소입니다.
list.copy () 목록의 단순 복사본은 동일하다 돌려 [:].

다음 예는 방법 목록의 대부분을 보여줍니다

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]

참고 : 유사 등 없음 반환 값, 삽입, 제거하거나 목록 방법 정렬을 수정할 수 있습니다.


스택으로 목록을 사용하여

리스트의 목록을 제조하는 방법을 용이하게 적층으로 사용할 수 있고, 특정 데이터 구조의 마지막 요소를 입력 최초로 스택 (LIFO)을 방출한다. 스택의 상단에 요소를 추가 할 수 있습니다 APPEND () 메서드를 사용합니다. 팝 명시하지 않고 인덱스 () 메소드는 스택의 상부에서 항목을 검색 할 수있다. 예를 들면 :

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

큐으로 목록을 사용하여

목적은 효율적이지 않다 그러나이 목록을 상기리스트는 큐의 요소를 결합하기 위하여 제 취출 최초로 대기열로 사용될 수있다. 목록 (모든 다른 원소가 하나씩 이동하기 때문에) 넣거나 헤드 스피드로 토출하지만, 속도의 목록 또는 팝업 요소의 끝에 추가 빠르고 아니다.

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")           # Terry arrives
>>> queue.append("Graham")          # Graham arrives
>>> queue.popleft()                 # The first to arrive now leaves
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

목록 함축

지능형리스트는 순서대로 목록을 만들 수있는 간결한 방법을 제공합니다. 일부 애플리케이션은 일반적으로 요소가 새로운리스트를 생성하거나, 판정 조건에 따라 결정된 시퀀스를 생성하기 위해서, 수득 된 결과, 동작들의 시퀀스의 각 요소에 적용한다.

각 목록 이해는 표현, 또는 절 경우 다음 0 개 이상의에 대한 후입니다. 결과 및 표현에 따라 경우 다음 컨텍스트에서 생성 된 목록입니다. 당신이 튜플의 공식을 원한다면, 당신은 괄호를 사용해야합니다.

여기에서 우리는 새 목록을 얻으려면 세 가지로 각 숫자를 나열합니다 :

>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]

이제 우리는 약간의 트릭을 재생 :

>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]

여기에서 우리는 시퀀스의 각 요소에 대해 개별적으로 메소드를 호출 :

>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']

우리는 필터로 경우 절을 사용할 수 있습니다 :

>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]

여기에 자전거 및 기타 기술에 대한 몇 가지 데모는 다음과 같습니다

>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

지능형리스트는 복잡한 식 또는 중첩 된 기능을 사용할 수 있습니다 :

>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

중첩 된 목록 이해

파이썬 목록은 중첩 될 수 있습니다.

다음 예는 3X4 매트릭스 목록을 보여줍니다 :

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

다음의 예는 4X3 변환 목록에 3X4 매트릭스를 보여줍니다

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

다음의 예는 다음과 같은 방법을 사용할 수 있습니다 :

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

또 다른 방법 :

>>> transposed = []
>>> for i in range(4):
...     # the following 3 lines implement the nested listcomp
...     transposed_row = []
...     for row in matrix:
...         transposed_row.append(row[i])
...     transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

델 문

당신은 목록에서 요소를 제거하는 대신 값의 인덱스에 의해 델 문을 사용할 수 있습니다. 이 팝업의 사용은 () 다른 값을 반환합니다. 당신은 (프리젠 테이션의 이전 방법은 빈리스트에 상처를 할당) 목록에서 컷을 제거하거나 전체 목록을 지우려면 델 문을 사용할 수 있습니다. 예를 들면 :

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

또한 델과 인스턴스 변수를 삭제할 수 있습니다 :

>>> del a

튜플과 시퀀스

쉼표로 구분 값 터플 번호는 예를 들면 구성되어

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

당신이 본대로, 출력에 튜플은 항상 곁에 제대로 중첩 된 구조를 표현하기 위해, 괄호 안에 있습니다. 아무 브래킷 없을 수도 있고, 입력하면되지만 (튜플은 크게 표현의 일부인 경우) 브래킷은 통상적으로 요구된다.


설정

컬렉션은 독특한 요소의 순서가 모음입니다. 기본 기능 테스트와 중복 요소를 제거를 포함한다.

당신은 괄호 세트를 만들 수 있습니다 ({}). 참고 : 빈 세트를 만들려면, 대신 {}의) 세트를 (사용해야합니다 빈 사전을 생성하는 다음 절 우리는이 데이터 구조를 소개합니다.

다음은 간단한 예제입니다 :

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 删除重复的
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 检测成员
True
>>> 'crabgrass' in basket
False

>>> # 以下演示了两个集合的操作
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # a 中唯一的字母
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 在 a 中的字母,但不在 b 中
{'r', 'd', 'b'}
>>> a | b                              # 在 a 或 b 中的字母
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 在 a 和 b 中都有的字母
{'a', 'c'}
>>> a ^ b                              # 在 a 或 b 中的字母,但不同时在 a 和 b 中
{'r', 'd', 'b', 'm', 'z', 'l'}

수집은 또한하기 식의 도출을 지원

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

사전

파이썬에 내장 된 또 다른 유용한 데이터 타입은 딕셔너리이다.

정수 인덱스의 연속 서열이 차이는 키워드 사전 인덱싱 키워드 보통 문자열이나 숫자와 임의의 유형의 불변 될 수있다.

사전으로 이해하는 가장 좋은 방법은 정렬되지 않은 키 => 값 쌍입니다. 동일한 사전에서, 키들은 서로 달라야한다.

중괄호 한 쌍의 빈 사전을 만듭니다 : {}.

이 사전의 사용의 간단한 예입니다 :

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

생성자 DICT ()는 키 튜플 목록에서 직접 사전을 빌드합니다. 당신이 고정 된 패턴이있는 경우, 지능형리스트는 특정 키 - 값 쌍을 지정합니다

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

또한, 사전 키와 값의 어떤 사전을 도출하는 식을 생성 할 수있다 :

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

키워드는 단순히 지정 때로는 더 편리 키워드 인수를 사용하여 키 - 값 쌍의 문자열 인 경우 :

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

순회 기술

사전의에서 통과되면, 키와 해당 값은 동시 통역 아웃에 대한 항목 () 메서드를 사용할 수 있습니다 :

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

순서로 이송 할 때, 위치 인덱스 및 대응 값을 열거 () 함수는 수신 사용될 수있다 :

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

두 개 이상의 시퀀스를 통과하는 동안, 당신은 함께 우편 ()를 사용할 수 있습니다 :

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

첫 번째 순서를 지정하고 () 함수 reversesd 전화, 역 순서를 통과하려면 :

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

원래의 값을 수정하지 않기 위하여, 정렬 () 함수의 사용은, 정렬 된 시퀀스를 반환에 따른 시퀀스를 이송 :

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

설명서를 참조하십시오