본문 바로가기
파이썬

파이썬 Python: nested 'for' loops

by º기록 2020. 10. 24.
반응형

두 번째 숫자가 항상 첫 번째 숫자보다 낮거나 같고, 세 번째 숫자가 두 번째 숫자보다 낮거나 같도록 모든 n 자리 숫자를 살펴보고 싶습니다. 다음과 같은 끔찍한 코드를 작성하여 얻을 수 있습니다.

for i in range(10):
    for j in range(i+1):
        for k in range(j+1):

등,하지만 10 자리 숫자를 사용하면 내 코드가 끔찍해 보이기 시작합니다. 또한 많은 글을 작성하고 일부를 칭찬하고 싶다면 들여 쓰기가 끔찍해집니다. 이것을 얻는 좋은 간결한 방법이 있습니까?


 

해결 방법

 

itertools 를 사용할 수 있습니다.

>>> for comb in itertools.combinations_with_replacement(range(9, -1, -1), 3):
        print comb

(9, 9, 9)
(9, 9, 8)
(9, 9, 7)
(9, 9, 6)
...
(4, 0, 0)
(3, 3, 3)
(3, 3, 2)
(3, 3, 1)
(3, 3, 0)
(3, 2, 2)
(3, 2, 1)
(3, 2, 0)
(3, 1, 1)
(3, 1, 0)
(3, 0, 0)
(2, 2, 2)
(2, 2, 1)
(2, 2, 0)
(2, 1, 1)
(2, 1, 0)
(2, 0, 0)
(1, 1, 1)
(1, 1, 0)
(1, 0, 0)
(0, 0, 0)

또는 재귀 적으로 충분할 때까지 점점 더 많은 숫자를 추가하여 숫자 튜플 대신 int 객체를 더 직접 생성 할 수 있습니다 (실제로 필요한지 확실하지 않음).

def build(enough, prefix=0):
    if prefix >= enough:
        print(prefix)
        return
    for digit in range(prefix % 10 + 1) if prefix else range(1, 10):
        build(enough, prefix * 10 + digit)

데모 ( " 000 "는 생략하고 원하는지 여부는 확실하지 않음) :

>>> n = 3
>>> build(10**(n-1))
100
110
111
200
210
211
220
221
222
300
310
311
320
321
322
330
331
332
333
400
410
411
420

 

참조 페이지 https://stackoverflow.com/questions/41764579

 

 

반응형

댓글