enumerate ()는 무엇을 의미합니까?
for row_number, row in enumerate(cursor):
파이썬에서 무엇을 합니까?
enumerate
이 맥락에서 무엇을 의미합니까?
이 enumerate()
함수 는 iterable에 카운터를 추가합니다.
따라서의 각 요소에 cursor
대해 튜플은 다음과 같이 생성됩니다 (counter, element)
. for
루프 귀속에 해당 row_number
하고 row
, 각각.
데모:
>>> elements = ('foo', 'bar', 'baz')
>>> for elem in elements:
... print elem
...
foo
bar
baz
>>> for count, elem in enumerate(elements):
... print count, elem
...
0 foo
1 bar
2 baz
기본적으로 enumerate()
계산을 시작 0
하지만 두 번째 정수 인수를 지정하면 대신 해당 숫자에서 시작합니다.
>>> for count, elem in enumerate(elements, 42):
... print count, elem
...
42 foo
43 bar
44 baz
enumerate()
파이썬 으로 재 구현해야한다면 다음 두 가지 방법이 있습니다. 하나 itertools.count()
는 계산을 수행하고 다른 하나는 수동으로 생성기 함수 에서 계산 합니다 .
from itertools import count
def enumerate(it, start=0):
# return an iterator that adds a counter to each element of it
return zip(count(start), it)
과
def enumerate(it, start=0):
count = start
for elem in it:
yield (count, elem)
count += 1
C에서 의 실제 구현 은 후자에 더 가깝습니다. 일반적인 for i, ...
포장 풀기 사례에 단일 튜플 객체를 재사용 하고 카운터가 너무 커질 때까지 카운터에 대해 표준 C 정수 값을 사용하여 Python 정수 객체를 사용하지 않도록 최적화합니다. 끝이 없습니다).
반복 가능한 객체를 반환하는 내장 함수입니다 . http://docs.python.org/2/library/functions.html#enumerate를 참조 하십시오 .
간단히 말해, iterable (목록과 같은)의 요소와 튜플에 결합 된 색인 번호를 반복합니다.
for item in enumerate(["a", "b", "c"]):
print item
인쇄물
(0, "a")
(1, "b")
(2, "c")
시퀀스 (또는 다른 반복 가능한 것)를 반복하고 인덱스 카운터를 사용하려는 경우 유용합니다. 카운터가 다른 값 (보통 1)에서 시작하도록하려면이를 두 번째 인수로 지정할 수 있습니다 enumerate
.
Brett Slatkin 의 책 ( 'Effective Python' )을 읽고 있으며 목록을 반복하고 목록의 현재 항목 색인을 알 수있는 또 다른 방법을 보여줍니다. 그러나 그것을 사용 enumerate
하지 말고 대신 사용하는 것이 좋습니다. 열거 형의 의미에 대해 질문했지만 다음을 이해했을 때 enumerate
현재 항목의 색인을 더 쉽고 알기 쉽게 알고 목록을 반복 하는 방법 을 이해했습니다 .
list_of_letters = ['a', 'b', 'c']
for i in range(len(list_of_letters)):
letter = list_of_letters[i]
print (i, letter)
출력은 다음과 같습니다.
0 a
1 b
2 c
나는 또한 enumerate
함수 에 대해 읽기 전에 더 어리석은 일을 했었습니다 .
i = 0
for n in list_of_letters:
print (i, n)
i = i +1
동일한 출력을 생성합니다.
그러나 enumerate
나는 단지 다음 과 같이 작성해야합니다.
list_of_letters = ['a', 'b', 'c']
for i, letter in enumerate(list_of_letters):
print (i, letter)
다른 사용자가 언급했듯이 enumerate
iterable의 각 항목 옆에 증분 색인을 추가하는 생성기가 있습니다.
당신이 목록의 말씀이있는 경우 그래서 l = ["test_1", "test_2", "test_3"]
는이 list(enumerate(l))
당신에게 이런 식으로 뭔가를 줄 것이다 [(0, 'test_1'), (1, 'test_2'), (2, 'test_3')]
.
이게 언제 유용한가요? 가능한 유스 케이스는 항목을 반복하고 목록에서 색인 만 알고 값은 알지 못하는 특정 항목을 건너 뛰려는 경우입니다 (값은 알 수 없기 때문에).
for index, value in enumerate(joint_values):
if index == 3:
continue
# Do something with the other `value`
따라서 정기적 인 for 루프를 수행 할 수 range
있지만 색인을 생성해야하는 항목 (예 :)에 액세스 할 수 있으므로 코드가 더 잘 읽 힙니다 joint_values[i]
.
다른 사용자가의 enumerate
사용 구현에 대해 언급했지만 zip
, 사용하지 않는 더 순수한 (그러나 약간 더 복잡한) 방법 itertools
은 다음과 같습니다.
def enumerate(l, start=0):
return zip(range(start, len(l) + start), l)
예:
l = ["test_1", "test_2", "test_3"]
enumerate(l)
enumerate(l, 10)
산출:
[(0, 'test_1'), (1, 'test_2'), (2, 'test_3')]
[(10, 'test_1'), (11, 'test_2'), (12, 'test_3')]
주석에서 언급했듯이 범위가있는이 접근법은 원래 enumerate
함수 와 마찬가지로 임의의 반복 가능 항목에서 작동하지 않습니다.
열거 함수는 다음과 같이 작동합니다.
doc = """I like movie. But I don't like the cast. The story is very nice"""
doc1 = doc.split('.')
for i in enumerate(doc1):
print(i)
출력은
(0, 'I like movie')
(1, " But I don't like the cast")
(2, ' The story is very nice')
참고 URL : https://stackoverflow.com/questions/22171558/what-does-enumerate-mean
'Programing' 카테고리의 다른 글
IDENTITY_INSERT가 OFF로 설정된 경우 'table'테이블에서 ID 열에 명시 적 값을 삽입 할 수 없습니다. (0) | 2020.03.12 |
---|---|
리플렉션을 사용하여 개인 메서드를 호출하려면 어떻게합니까? (0) | 2020.03.12 |
파이썬에서 순환 (또는 순환) 가져 오기 (0) | 2020.03.12 |
루프 전 또는 루프에서 변수 선언의 차이점은 무엇입니까? (0) | 2020.03.12 |
Visual Studio에서 두 개의 프로젝트를 한 번에 실행 (0) | 2020.03.12 |