편집 : 반복자 재설정을 다루는 similar question here이 있습니다. 그러나 아래의 대답은 중첩 된 반복자의 실제 문제를 해결하고 누락 된 이슈를 처리하여 중첩 된 반복자가 재설정되지 않도록합니다.Python - 반복자 반복하기
반복자를 통해 파이썬에서 두 번 반복하는 방법이 있습니까?
아래의 예제 코드에서 나는 두 번째 반복이 첫 번째 것과 동일한 개체에서 작동한다는 것을 알 수 있습니다. 따라서 이상한 결과가 나타납니다. 이것을 아래의 C#과 비교해 보면 내가 결과를 얻게됩니다.
내가 원하는 것을 할 수있는 방법이 있습니까? iterator의 사본을 만들 수 있는지 또는 그것이 가져온 함수를 "검색"할 수 있는지 궁금 해서요.하지만 아마도 간단한 방법이있을 것입니다. (저는 아래의 장난감 예제에서 MyIter()
을 두 번 호출 할 수 있음을 알고 있습니다.하지만 iterator가 어디에서 왔는지 모를 경우 쓸모가 없습니다.).
static IEnumerable MyIter()
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
}
static void PrintCombos(IEnumerable x)
{
foreach (var a in x)
foreach (var b in x)
Console.WriteLine(a + "-" + b);
}
public static void Main(String[] args)
{
PrintCombos(MyIter());
}
주는 :
def MyIter():
yield 1;
yield 2;
yield 3;
yield 4;
def PrintCombos(x):
for a in x:
for b in x:
print(a,"-",b);
PrintCombos(MyIter());
가와
1 - 2
1 - 3
1 - 4
대비를 제공
1-1
1-2
1-3
1-4
2-1
2-2
. . .
파이썬에서 반복자를 무제한 반복 할 수 있습니다. 그러나 만약 당신이 발전기 (당신이 주어진 코드의 외형에 의거 함)를 참조한다면 발전기 자체에 대해 여러 번 그렇게 할 방법이 없다. 그러나 생성기 결과를 메모리에 저장하고이를 반복 할 수 있습니다. 당신이 제공 한 예제에서'PrintCombos (list (MyIter()))' –
['itertools.tee'] (https://docs.python.org/3/library/itertools.html)을 호출하면됩니다. # itertools.tee)가 당신이 찾고있는 것일 수도 있습니다. – Matthias
[반복자를 파이썬으로 리셋 할 수 있습니까?] (http://stackoverflow.com/questions/3266180/can-iterators-be-reset-in-python) –