중첩 루프를 사용할 때 들여 쓰기를 줄이는 방법이 있습니까?파이썬 중첩 루프를 사용할 때 들여 쓰기 줄이기
for source_i in sources:
for source_j in sources:
for ni in source_i.nodes:
for nj in source_j.nodes:
if ni != nj:
do_thing(ni, nj)
중첩 루프를 사용할 때 들여 쓰기를 줄이는 방법이 있습니까?파이썬 중첩 루프를 사용할 때 들여 쓰기 줄이기
for source_i in sources:
for source_j in sources:
for ni in source_i.nodes:
for nj in source_j.nodes:
if ni != nj:
do_thing(ni, nj)
for source_i in sources:
for source_j in sources:
pass
이 sources
자체의 직교 제품에 쌍을 반복과 같은 일이다.
import itertools
for (i,j) in itertools.product(sources, repeat=2):
pass
같은 패턴 여기 : 이것은 itertools
을 가져 와서 한 줄에 쓸 수있는 당신이 할 수있는 둥지를 이제
for (ni, nj) in itertools.product(i.nodes, j.nodes):
pass
을 :
for ni in i.nodes:
for nj in j.nodes:
pass
이
는 다음과 같이 다시 작성할 수 있습니다import itertools
for (i,j) in itertools.product(sources, repeat=2):
for (ni, nj) in itertools.product(i.nodes, j.nodes):
if ni != nj:
do_thing(ni, nj)
예, 중첩 루프를 대체 할 수있는 한 가지 방법은 itertools.product를 사용하는 것입니다 :
는 (워드 프로세서에서 직접) "입력의 직교 제품은 반복 가능 객체는"product
함수가
from itertools import product
for source_i, source_j in product(sources, repeat=2):
for ni, nj in product(source_i.nodes, source_j.nodes):
...
.
'do_thing' 행을'['앞에; 모든 새로운 줄과 콜론을 꺼내십시오. 마지막에']'를 추가하십시오. 빌라! 하지만 그러지 마세요. 목록 내포는 목록을 만드는 쉬운 방법입니다. 'do_thing (...)'의 리턴리스트를 사용하지 않는다면 그것의리스트를 만드는 것은 좋은 생각이 아닙니다. List comprehensions은 목록 작성에 사용되어야하며 부작용이 있어서는 안됩니다. – zondo