총 카운터 수를 계속 유지하도록 카운터를 원합니다. 내가 할 :중첩 된 for 루프의 반복 카운터 얻기
counter = 0;
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
counter += 1;
하지만 더 파이썬 방법이 요구 도울 수 없어요?
총 카운터 수를 계속 유지하도록 카운터를 원합니다. 내가 할 :중첩 된 for 루프의 반복 카운터 얻기
counter = 0;
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
counter += 1;
하지만 더 파이썬 방법이 요구 도울 수 없어요?
은 그게 (세미콜론 그렇다.)수록 파이썬으로
내 유일한 조언은 당신이 그에 더 많은 코드를 넣어 시작하는 경우 i
및 j
보다 설명적인 이름을 부여하는 것입니다 관하여, 간단하고 읽을 수 있어요 루프. Codemonkey가 지적 하듯이
for counter,ijpair in enumerate(itertools.product(enumerate(items),enumerate(other))):
i,j = ijpair
//... do stuff
, 우리는 여기에 가독성을 증가하지 않는, 그리고 언급 된 명시 적 사용, 정말 개선이 아니다. 그러나 enumerate 및 itertools.product 표현식은 모두 생성자/반복기이므로 map과 같은 다른 함수로 전달하여 사용할 수 있습니다. 그래서 당신은 항목 otheritem가 같은 값이었다 어디를 필터링 할 수 :
allelements = itertools.product(items, others)
sameys = itertools.ifilter(lambda a: a[0]==a[1], allelements)
그리고 지금 sameys는 allelements
와 완전히 동일한 구조를 가지고있다. 핵심은 iterable 세트 전체가 루프 구조가 아니라 반복자 표현이되어보다 쉽게 전달할 수 있다는 것입니다.
없이 나는 * 덜 읽을 *만큼 그 * 더 파이썬 *를 호출하지 것이다. – Hubro
iterator는 무한 할 수 있으며, 'flat is nested'보다 우수합니다. itertools는 Python에 포함 된 배터리 중 하나입니다 (제품은 v2.6). 하지만 그렇습니다. 읽기가 쉽지 않습니다. –
또한 조합, 교체 등의 조합으로 전환하기가 쉽습니다. –
내가 가장 파이썬 방법은 튜플 (i,j)
이 count
보다 훨씬 더 많은 의미를 가지고 있기 때문에, count
보다는 i
및 j
을 기록하는 것입니다 말할 것이다 - 당신이 (i,j)
에서 수를 계산할 수 있습니다!
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
where_i_am = (i,j)
# count = i*len(anotheritems) + j + 1
total_iterations = len(items) * len(anotheritems) # equivalently (i+1) * (j+1)
더 파이썬 방법은 동일 할 것이지만, 세미콜론 : –