programing

목록의 마지막 항목을 제외한 모든 항목을 순환하는 방법은 무엇입니까?

itsource 2023. 5. 7. 21:35
반응형

목록의 마지막 항목을 제외한 모든 항목을 순환하는 방법은 무엇입니까?

사용for루프, 목록의 마지막 항목을 제외한 모든 항목을 루프하려면 어떻게 해야 합니까?저는 각 항목을 뒤에 오는 항목과 비교하여 목록을 반복해서 확인하고 싶습니다.인덱스를 사용하지 않고도 이 작업을 수행할 수 있습니까?

for x in y[:-1]

한다면y가 제너레이터인 경우 위의 항목이 작동하지 않습니다.

시퀀스 항목을 다음과 비교하는 가장 쉬운 방법:

for i, j in zip(a, a[1:]):
     # compare i (the current) to j (the following)

시퀀스의 모든 요소를 쌍으로 가져오려면 이 방법을 사용합니다(쌍으로 함수는 iiter tools 모듈의 예제에서 가져온 것입니다).

from itertools import tee, izip, chain

def pairwise(seq):
    a,b = tee(seq)
    b.next()
    return izip(a,b)

for current_item, next_item in pairwise(y):
    if compare(current_item, next_item):
        # do what you have to do

마지막 값을 어떤 특별한 값과 비교해야 할 경우, 그 값을 끝까지 연결합니다.

for current, next_item in pairwise(chain(y, [None])):

만약 당신이 목록에서 n번째 항목과 n+1번째 항목을 비교하는 것을 의미한다면 당신은 또한 할 수 있습니다.

>>> for i in range(len(list[:-1])):
...     print list[i]>list[i+1]

하드 코딩이 진행되지 않는다는 점에 유의하십시오.당신이 다르게 느끼지 않는 한 이것은 괜찮을 것입니다.

목록을 인스턴스화하지 않고 반복기의 다음 항목과 각 항목을 비교하는 방법

import itertools
it = (x for x in range(10))
data1, data2 = itertools.tee(it)
data2.next()
for a, b in itertools.izip(data1, data2):
  print a, b

이것은 OP가 질문했어야 했던 것에 대한 답입니다. 즉, 연속적인 요소를 비교하는 목록을 통과해야 하지만(우수한 사일런트 고스트 답변), 모든 그룹(n-gram)에 대해 일반화되었습니다. 2, 3, ... n:

zip(*(l[start:] for start in range(0, n)))

예:

l = range(0, 4)  # [0, 1, 2, 3]

list(zip(*(l[start:] for start in range(0, 2)))) # == [(0, 1), (1, 2), (2, 3)]
list(zip(*(l[start:] for start in range(0, 3)))) # == [(0, 1, 2), (1, 2, 3)]
list(zip(*(l[start:] for start in range(0, 4)))) # == [(0, 1, 2, 3)]
list(zip(*(l[start:] for start in range(0, 5)))) # == []

설명:

  • l[start:]인덱스에서 시작하는 목록/문서를 생성합니다.start
  • *list또는*generator모든 요소를 둘러싸는 함수로 전달합니다.zip쓴 것처럼zip(elem1, elem2, ...)

참고:

AFAIK, 이 코드는 최대한 게으릅니다.테스트되지 않았습니다.

언급URL : https://stackoverflow.com/questions/914715/how-to-loop-through-all-but-the-last-item-of-a-list

반응형