파이썬에서 for 루프를 줄이는 것이 불가능합니까?


93

나는 틀릴 수 있지만 (알려 주시면 질문을 삭제하겠습니다) 파이썬이 응답하지 않는 것 같습니다

for n in range(6,0):
    print n

xrange를 사용해 보았지만 작동하지 않았습니다. 어떻게 구현할 수 있습니까?


호기심으로 이것을 사용하고 있습니까? 이 기능이 필요한 경우는 드뭅니다!
Katriel 2010

@katrielalex 나는 그것을 오른쪽에서 왼쪽으로 행렬을 반복하는 데 사용합니다. 내가해야한다고 제안하는 다른 방법이 있습니까?
Gal

for i in reversed(mat):속도가 느릴 수 있지만 시도해 볼 수 있습니다.
Katriel

살펴 보시기 바랍니다 범위를 역순으로 인쇄하기 목록 은 다른 유용한 정보를 제공합니다.
RF

1
좀 걸릴하시기 바랍니다 범위를 역순으로 목록을 인쇄 , 허용 대답은 매우 명확하게 설명합니다.
RF

답변:


214
for n in range(6,0,-1):
    print n
# prints [6, 5, 4, 3, 2, 1]

20
Betcha OP는 실제로 원했습니다 range(5,-1,-1). 그는 아마도 시행 착오를 통해 그것을 알아낼 수 있었을 것입니다.
kojiro 2013-08-26

42

이것은 매우 늦었지만 더 우아한 방법이 있음을 덧붙이고 싶었습니다. reversed

for i in reversed(range(10)):
    print i

제공합니다 :

4
3
2
1
0

1
그게 뭐가 우아할까요? 원하는 방식으로 목록을 생성하는 대신 목록을 뒤집는 데 시간을 소비합니다.
alexis

5
@alexis는 비용이 들지 않습니다. CPython에 내장 된 reversed(range)멋진 range_reverse최적화 덕분에 무료로 얻을 수 있습니다. 나는 몇 가지 빠른 벤치 마크를했고, 사이에 상당한 비용 차이 찾을 수 없습니다 step=-1reversed()파이썬 2.7과 3.3 모두를. 또한 이 관용구는 heapq에서 사용됩니다 .
kojiro

고마워, @kojiro, 흥미 롭다. 그러나 xrangePython 2.7 테스트에서 사용하지 않는 reverse한 범위 객체가 아니라 이미 생성 된 일반 목록에서 작동합니다. 그래서 당신은 어떤 목록이 효율적으로 되돌릴 수 있다고 말하는 range/xrange 입니까 , 아니면 단지 객체입니까? (링크하는 heapq 코드에는 Python 3 범위 개체가 포함됩니다.)
alexis

@alexis 어떤 목록도 효율적으로 되돌릴 수 있다고 제안 할만큼 대담하지는 않을 것입니다. 어쨌든 대답하기에는 너무 자격이없는 진술입니다. heapify 코드를 변경하는 것이하지만, 말하고 step=-1reversed()파이썬 사이에 2.32.4
코지로

1
reversed(range(10))4통해 출력 할 수 없습니다 0. 아마도 당신은 의미 range(5)합니까?
Abhijit Sarkar

12
for n in range(6,0,-1)

이것은 당신에게 줄 것입니다 6,5,4,3,2,1

에 관해서

for n in reversed(range(0,6))

너에게 줄 것이다 5,4,3,2,1,0




2

0은이 조건이 참일 때 조건부 값이고 루프는 계속 실행되며 10은 초기 값입니다. 1은 단순 감소 일 수있는 수정 자입니다.

for number in reversed(range(0,10,1)):
print number;

1

파티에 늦었지만 자신을 생성하는 작업을 맡거나 이것이 어떻게 작동하는지 확인하려는 사람을 위해 원하는 증분에 따라 시작-중지 값을 재정렬하는 추가 보너스가있는 기능이 있습니다.

def RANGE(start, stop=None, increment=1):
    if stop is None:
        stop = start
        start = 1

    value_list = sorted([start, stop])

    if increment == 0:
        print('Error! Please enter nonzero increment value!')
    else:
        value_list = sorted([start, stop])
        if increment < 0:
            start = value_list[1]
            stop = value_list[0]
            while start >= stop:
                worker = start
                start += increment
                yield worker
        else:
            start = value_list[0]
            stop = value_list[1]
            while start < stop:
                worker = start
                start += increment
                yield worker

음수 증가 :

for i in RANGE(1, 10, -1):
    print(i)

또는 시작-중지가 반대로 된 경우 :

for i in RANGE(10, 1, -1):
    print(i)

산출:

10
9
8
7
6
5
4
3
2
1

정기적 인 증분 :

for i in RANGE(1, 10):
    print(i)

산출:

1
2
3
4
5
6
7
8
9

0 증분 :

for i in RANGE(1, 10, 0):
    print(i)

산출:

'Error! Please enter nonzero increment value!'

0

-1각 단계에서 감소 할 값을 나타내는 python3의 경우 for n in range(6,0,-1): print(n)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.