질문자 :Joan Venge
다음과 같은 for
루프의 인덱스에 어떻게 액세스합니까?
ints = [8, 23, 45, 12, 78] for i in ints: print('item #{} = {}'.format(???, i))
이 출력을 얻고 싶습니다.
item #1 = 8 item #2 = 23 item #3 = 45 item #4 = 12 item #5 = 78
for
루프를 사용하여 루프를 반복할 때 이 경우 1에서 5까지 루프 인덱스에 어떻게 액세스합니까?
답변자 : Mike Hordecki
인덱스 변수(C 또는 PHP와 같은 언어에서 일반적으로 사용하는)와 같은 추가 상태 변수를 사용하는 것은 비 파이썬적인 것으로 간주됩니다.
더 나은 옵션은 Python 2와 3 모두에서 사용할 수 enumerate()
for idx, val in enumerate(ints): print(idx, val)
자세한 내용은 PEP 279 를 확인하십시오.
답변자 : Aaron Hall
for 루프를 사용하여 이 경우 1에서 5까지 루프 인덱스에 어떻게 액세스합니까?
반복할 때 요소가 있는 인덱스를 가져오려면 enumerate
를 사용하십시오.
for index, item in enumerate(items): print(index, item)
그리고 Python의 인덱스는 0에서 시작하므로 위와 같이 0에서 4까지 얻을 수 있습니다. 1부터 5까지의 개수를 원하면 다음과 같이 하십시오.
count = 0 # in case items is empty and you need it after the loop for count, item in enumerate(items, start=1): print(count, item)
단일 제어 흐름
당신이 요구하는 것은 저수준 언어의 대부분의 프로그래머가 사용하는 알고리즘인 다음과 같은 Pythonic입니다.
index = 0 # Python's indexing starts at zero for item in items: # Python's for loops are a "for each" loop print(index, item) index += 1
또는 for-each 루프가 없는 언어에서:
index = 0 while index < len(items): print(index, items[index]) index += 1
또는 때로는 Python에서 더 일반적으로(그러나 단조롭게) 발견됩니다.
for index in range(len(items)): print(index, items[index])
열거 기능 사용
Python의 enumerate
함수 는 인덱스에 대한 설명을 숨기고 iterable을 다른 iterable( enumerate
객체)로 캡슐화하여 인덱스와 원래 iterable이 제공할 항목의 2개 항목 튜플을 생성하여 시각적 혼란을 줄입니다. 다음과 같습니다.
for index, item in enumerate(items, start=0): # default is zero print(index, item)
이 코드 샘플은 Python의 관용적 코드와 그렇지 않은 코드의 차이점에 대한 표준적인 예입니다. 관용적 코드는 의도된 방식으로 작성된 정교한(복잡하지 않은) Python입니다. 언어 설계자는 관용적 코드를 기대합니다. 이는 일반적으로 이 코드가 더 읽기 쉬울 뿐만 아니라 더 효율적임을 의미합니다.
카운트 받기
진행하면서 인덱스가 필요하지 않지만 반복 횟수(때로는 바람직함)가 필요하더라도 1
부터 시작할 수 있으며 최종 숫자가 카운트가 됩니다.
count = 0 # in case items is empty for count, item in enumerate(items, start=1): # default is zero print(item) print('there were {0} items printed'.format(count))
카운트는 1에서 5까지 원한다고 말했을 때 (인덱스와 반대) 요청하려는 것보다 더 많은 것 같습니다.
분해하기 - 단계별 설명
이러한 예를 분해하기 위해 인덱스로 반복하려는 항목 목록이 있다고 가정해 보겠습니다.
items = ['a', 'b', 'c', 'd', 'e']
이제 이 iterable을 enumerate에 전달하여 enumerate 객체를 생성합니다.
enumerate_object = enumerate(items) # the enumerate object
next
함수를 사용하여 루프에서 얻을 수 있는 이 iterable에서 첫 번째 항목을 가져올 수 있습니다.
iteration = next(enumerate_object) # first iteration from enumerate print(iteration)
그리고 첫 번째 인덱스 0
과 첫 번째 항목인 'a'
의 튜플을 얻습니다.
(0, 'a')
이 2-튜플에서 요소를 추출하기 위해 "시퀀스 언패킹 "이라고 하는 것을 사용할 수 있습니다.
index, item = iteration # 0, 'a' = (0, 'a') # essentially this.
index
를 검사할 때 첫 번째 인덱스 0 을 item
은 첫 번째 항목 'a'
합니다.
>>> print(index) 0 >>> print(item) a
결론
- Python 인덱스는 0에서 시작합니다.
- iterable을 반복할 때 iterable에서 이러한 인덱스를 가져오려면 enumerate 함수를 사용하십시오.
- 관용적 방식으로 enumerate를 사용하면(튜플 압축 해제와 함께) 더 읽기 쉽고 유지 관리하기 쉬운 코드가 생성됩니다.
이렇게 하세요:
for index, item in enumerate(items, start=0): # Python indexes start at zero print(index, item)
답변자 : A.J.
0
아닌 1
에서 시작하는 것은 매우 간단합니다.
for index, item in enumerate(iterable, start=1): print index, item # Used to print in python<3.x print(index, item) # Mirate print() after 3.x+
답변자 : David Hanak
for i in range(len(ints)): print(i, ints[i]) # print updated to print() in Python 3.x+
답변자 : Charitoo
Python의 표준과 마찬가지로 이를 수행하는 몇 가지 방법이 있습니다. 모든 예에서 다음을 가정합니다. lst = [1, 2, 3, 4, 5]
1. enumerate 사용( 가장 관용적인 것으로 간주됨 )
for index, element in enumerate(lst): # do the things that need doing here
무한 재귀에 들어갈 가능성이 제거되었기 때문에 이것은 또한 내 생각에 가장 안전한 옵션입니다. 항목과 해당 인덱스는 모두 변수에 보관되며 항목에 액세스하기 위해 추가 코드를 작성할 필요가 없습니다.
2. 인덱스를 담을 변수 생성( for
사용 )
for index in range(len(lst)): # or xrange # you will have to write extra code to get the element
3. 인덱스를 담을 변수 생성( while
사용 )
index = 0 while index < len(lst): # you will have to write extra code to get the element index += 1 # escape infinite recursion
4. 항상 다른 방법이 있습니다
이전에 설명했듯이 여기에 설명되지 않은 다른 방법이 있으며 다른 상황에서 더 많이 적용될 수 있습니다. 예 를 itertools.chain
을 for와 함께 사용합니다. 다른 예제보다 중첩 루프를 더 잘 처리합니다.
답변자 : Charlie Martin
구식 방법:
for ix in range(len(ints)): print(ints[ix])
목록 이해:
[ (ix, ints[ix]) for ix in range(len(ints))] >>> ints [1, 2, 3, 4, 5] >>> for ix in range(len(ints)): print ints[ix] ... 1 2 3 4 5 >>> [ (ix, ints[ix]) for ix in range(len(ints))] [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)] >>> lc = [ (ix, ints[ix]) for ix in range(len(ints))] >>> for tup in lc: ... print(tup) ... (0, 1) (1, 2) (2, 3) (3, 4) (4, 5) >>>
답변자 : Andriy Ivaneyko
인덱스 액세스 및 접근 방식의 성능 벤치마킹
Python 3.7 에서 루프 내 목록의 인덱스에 액세스하는 가장 빠른 방법은 작은 목록, 중간 목록 및 거대한 목록에 대해 열거 방법 을 사용하는 것입니다.
아래 코드 샘플에서 목록을 반복하고 인덱스 값과 성능 메트릭에 액세스하는 데 사용할 수 있는 다양한 접근 방식 을 참조하세요.
# Using range def range_loop(iterable): for i in range(len(iterable)): 1 + iterable[i] # Using enumerate def enumerate_loop(iterable): for i, val in enumerate(iterable): 1 + val # Manual indexing def manual_indexing_loop(iterable): index = 0 for item in iterable: 1 + item index += 1
아래에서 각 방법에 대한 성능 측정항목을 참조하세요.
from timeit import timeit def measure(l, number=10000): print("Measure speed for list with %d items" % len(l)) print("range: ", timeit(lambda :range_loop(l), number=number)) print("enumerate: ", timeit(lambda :enumerate_loop(l), number=number)) print("manual_indexing: ", timeit(lambda :manual_indexing_loop(l), number=number)) # Measure speed for list with 1000 items measure(range(1000)) # range: 1.161622366 # enumerate: 0.5661940879999996 # manual_indexing: 0.610455682 # Measure speed for list with 100000 items measure(range(10000)) # range: 11.794482958 # enumerate: 6.197628574000001 # manual_indexing: 6.935181098000001 # Measure speed for list with 10000000 items measure(range(10000000), number=100) # range: 121.416859069 # enumerate: 62.718909123 # manual_indexing: 69.59575057400002
결과적으로 enumerate
방법을 사용하는 것이 인덱스가 필요할 때 가장 빠른 반복 방법입니다.
아래에 유용한 링크 추가:
답변자 : Andy Fedoroff
for
루프에서 인덱스에 액세스할 때 얻는 것입니다.
for i in enumerate(items): print(i)
items = [8, 23, 45, 12, 78] for i in enumerate(items): print("index/value", i)
결과:
# index/value (0, 8) # index/value (1, 23) # index/value (2, 45) # index/value (3, 12) # index/value (4, 78)
for i, val in enumerate(items): print(i, val)
items = [8, 23, 45, 12, 78] for i, val in enumerate(items): print("index", i, "for value", val)
결과:
# index 0 for value 8 # index 1 for value 23 # index 2 for value 45 # index 3 for value 12 # index 4 for value 78
for i, val in enumerate(items): print(i)
items = [8, 23, 45, 12, 78] for i, val in enumerate(items): print("index", i)
결과:
# index 0 # index 1 # index 2 # index 3 # index 4
답변자 : ytpillai
우선, 인덱스는 0에서 4까지입니다. 프로그래밍 언어는 0부터 계산을 시작합니다. 그것을 잊지 마십시오. 그렇지 않으면 경계를 벗어난 색인 예외가 발생합니다. for 루프에서 필요한 것은 다음과 같이 0에서 4까지 세는 변수입니다.
for x in range(0, 5):
루프가 최대값 앞에 하나의 숫자를 중지하기 때문에 0에서 5까지를 썼음을 명심하십시오. :)
인덱스 값을 얻으려면 다음을 사용하십시오.
list[index]
답변자 : thinker007
이 토론에 따르면: http://bytes.com/topic/python/answers/464012-objects-list-index
루프 카운터 반복
인덱스를 반복하는 현재 관용구는 내장 range
기능을 사용합니다.
for i in range(len(sequence)): # work with index i
요소와 인덱스 모두에 대한 루프는 이전 관용구 또는 새로운 zip
내장 함수를 사용하여 수행할 수 있습니다.
for i in range(len(sequence)): e = sequence[i] # work with index i and element e
또는
for i, e in zip(range(len(sequence)), sequence): # work with index i and element e
http://www.python.org/dev/peps/pep-0212/ 를 통해
답변자 : Liam
다음 코드로 할 수 있습니다.
ints = [8, 23, 45, 12, 78] index = 0 for value in (ints): index +=1 print index, value
루프 끝에서 인덱스 값을 재설정해야 하는 경우 이 코드를 사용하십시오.
ints = [8, 23, 45, 12, 78] index = 0 for value in (ints): index +=1 print index, value if index >= len(ints)-1: index = 0
답변자 : Ankur Kothari
nums = [1, 2, 3, 4, 5]
를 반복한다면 나는 할 것입니다.
for i, num in enumerate(nums, start=1): print(i, num)
또는 길이를 l = len(nums)
for i in range(l): print(i+1, nums[i])
답변자 : Anurag Misra
이 문제에 대한 가장 좋은 해결책은 enumerate
내장 함수를 사용하는 것입니다.
enumerate
tuple
반환합니다. 여기서 첫 번째 값은 인덱스이고 두 번째 값은 해당 인덱스에 있는 목록의 요소입니다.
In [1]: ints = [8, 23, 45, 12, 78] In [2]: for idx, val in enumerate(ints): ...: print(idx, val) ...: (0, 8) (1, 23) (2, 45) (3, 12) (4, 78)
답변자 : DrM
귀하의 질문에 "이 경우 1에서 5까지 루프 인덱스에 어떻게 액세스합니까?"라고 작성합니다.
그러나 목록의 인덱스는 0부터 실행됩니다. 따라서 우리는 실제로 원하는 것이 목록의 각 항목에 대한 인덱스와 항목인지 또는 1부터 시작하는 숫자를 원하는지 여부를 알아야 합니다. 다행히 Python에서는 둘 중 하나 또는 둘 다를 수행하기 쉽습니다.
먼저 명확하게 하기 위해 enumerate
함수는 목록의 각 항목에 대해 인덱스와 해당 항목을 반복적으로 반환합니다.
alist = [1, 2, 3, 4, 5] for n, a in enumerate(alist): print("%d %d" % (n, a))
위의 출력은 다음과 같습니다.
0 1 1 2 2 3 3 4 4 5
인덱스는 0부터 실행됩니다. 이러한 종류의 인덱싱은 Python 및 C를 포함한 최신 프로그래밍 언어에서 일반적입니다.
루프가 목록의 일부에 걸쳐 있도록 하려면 목록의 일부에 대해 표준 Python 구문을 사용할 수 있습니다. 예를 들어 목록의 두 번째 항목에서 마지막 항목까지 반복하려면 다음을 사용할 수 있습니다.
for n, a in enumerate(alist[1:-1]): print("%d %d" % (n, a))
다시 한 번 출력 인덱스는 0에서 실행되며,
0 2 1 3 2 4
그러면 enumerate()
start=n
스위치가 나타납니다. 이것은 단순히 인덱스를 오프셋하며 루프 내부의 인덱스에 숫자를 추가할 수 있습니다.
for n, a in enumerate(alist, start=1): print("%d %d" % (n, a))
출력은
1 1 2 2 3 3 4 4 5 5
답변자 : Ashok Kumar Jayaraman
다음을 시도할 수도 있습니다.
data = ['itemA.ABC', 'itemB.defg', 'itemC.drug', 'itemD.ashok'] x = [] for (i, item) in enumerate(data): a = (i, str(item).split('.')) x.append(a) for index, value in x: print(index, value)
출력은
0 ['itemA', 'ABC'] 1 ['itemB', 'defg'] 2 ['itemC', 'drug'] 3 ['itemD', 'ashok']
답변자 : RIshu
목록에 중복 값이 없는 경우:
for i in ints: indx = ints.index(i) print(i, indx)
답변자 : PyRsquared
index
방법을 사용할 수 있습니다.
ints = [8, 23, 45, 12, 78] inds = [ints.index(i) for i in ints]
편집 ints
중복 항목이 있는 경우 이 방법이 작동하지 않는다는 주석에서 강조 표시된 ints
모든 값에 대해 작동해야 합니다.
ints = [8, 8, 8, 23, 45, 12, 78] inds = [tup[0] for tup in enumerate(ints)]
또는 대안으로
ints = [8, 8, 8, 23, 45, 12, 78] inds = [tup for tup in enumerate(ints)]
튜플 목록으로 ints
의 인덱스와 값을 모두 얻으려는 경우.
enumerate
하는 방법을 사용하지만 목록 이해를 통해 더 적은 코드로 더 빠르게 만듭니다.
답변자 : Amar Kumar
While 루프를 사용한 간단한 대답:
arr = [8, 23, 45, 12, 78] i = 0 while i < len(arr): print("Item ", i + 1, " = ", arr[i]) i += 1
산출:
답변자 : lola
for
루프를 사용하여 목록 이해에서 (인덱스, 값)의 튜플을 인쇄하려면:
ints = [8, 23, 45, 12, 78] print [(i,ints[i]) for i in range(len(ints))]
산출:
[(0, 8), (1, 23), (2, 45), (3, 12), (4, 78)]
답변자 : Rahul
count
와 같은 변수를 사용하여 목록의 요소 수를 계산할 수 있습니다.
ints = [8, 23, 45, 12, 78] count = 0 for i in ints: count = count + 1 print('item #{} = {}'.format(count, i))
답변자 : Purnima
열거를 사용하여 목록을 반복하고 start=1
을 사용할 수 있습니다. 기본값이 0이므로 0에서 계산을 시작한다는 의미입니다.
다음은 예입니다.
for index,val in enumerate(ints,start=1): print(f"item #{index} = {val}")
또한, f-strings
을 사용하면 요청한 출력을 빠르게 얻을 수 있으며 index와 val을 {}-자리 표시자에 직접 전달할 수 있으므로 더 읽기 쉽습니다.
산출:
item #1 = 8 item #2 = 23 item #3 = 45 item #4 = 12 item #5 = 78
답변자 : Sumit Kumar
이것은 충분히 도움이 됩니다.
list2 = [11, 'sumit', 43.21, 'sharma', '44', 'test', 2] for x in list1: print( 'index: ', list2.index(x), 'value:', x )
답변자 : prashant sachdeva
열거를 사용하여 목록을 반복하십시오.
ints = [8, 23, 45, 12, 78] for idx,val in enumerate(ints): print('item #{} = {}'.format(idx+1, val))
산출:
item #1 = 8 item #2 = 23 item #3 = 45 item #4 = 12 item #5 = 78
출처 : Here
출처 : http:www.stackoverflow.com/questions/522563/accessing-the-index-in-for-loops">