#Day19 - 정렬과 정렬, 역순과 역순의 성능 비교

sort(), sorted() 및 reverse(), reversed() 중에서 어느 것이 더 빠른지 알아내려고 노력할 것입니다.

정렬 및 정렬



정렬과 정렬은 모두 목록의 요소를 정렬하는 데 사용됩니다. 두 가지 차이점이 있습니다
  • Sorted()는 내장 Python 함수이고 sort()는 클래스 목록의 메서드입니다.
  • Sorted()는 요소가 정렬된 목록을 반환하지만 sort()는 제자리 메서드입니다. 원래 목록을 업데이트합니다.

  • import random
    
    lst1 = [random.randint(0,10) for _ in range(5)]
    
    print(lst1)
    print(lst1.sort())
    print(lst1)
    
    '''
    OUTPUT
    
    [2, 9, 10, 7, 0]
    None
    [0, 2, 7, 9, 10]
    
    '''
    


    보시다시피 두 번째 print 문은 정렬()이 제자리 메서드이기 때문에 None을 출력합니다. 세 번째 print 문에서 lst1을 인쇄할 때 요소가 정렬된 것을 볼 수 있습니다.

    import random
    
    lst1 = [random.randint(0,10) for _ in range(5)]
    
    print(lst1)
    print(sorted(lst1))
    print(lst1)
    
    '''
    OUTPUT
    
    [3, 6, 7, 5, 5]
    [3, 5, 5, 6, 7]
    [3, 6, 7, 5, 5]
    
    '''
    


    sort()와 달리 두 번째 print 문은 정렬된 요소와 함께 목록을 인쇄하고 세 번째 print 문은 원래 순서대로 목록을 인쇄합니다.

    정렬과 정렬에 걸리는 시간 비교



    1000개의 요소 목록이 있으며 두 가지 방법을 모두 사용하여 정렬하려고 합니다.

    import time
    import random
    
    lst1=[random.randint(1,1000) for i in range(1000)]
    
    lst2 = lst1.copy()
    
    s1 = time.perf_counter()
    sorted(lst1)
    print(f'It took {time.perf_counter() - s1} seconds for sorted()')
    
    s1 = time.perf_counter()
    lst2.sort()
    print(f'It took {time.perf_counter() - s1} seconds for sort()')
    


    아래는 출력

    It took 0.00015853159129619598 seconds for sorted()
    It took 0.0010612830519676208 seconds for sort()
    


    sort()가 더 빠른 것 같지만 다시 실행해 보겠습니다.

    It took 0.00016496609896421432  seconds for sorted()
    It took 0.00013628974556922913 seconds for sort()
    


    흠, 이번에는 약간의 차이로 정렬이 더 빠른 것 같습니다.

    테스트가 결정적이지 않은 것 같습니다. 다른 것을 시도해 보겠습니다.
    위의 비교를 25번 실행하고 각 반복 중에 어떤 방법이 더 빠른지 확인할 것입니다.

    import time
    import random
    
    sort_count = 0
    sorted_count = 0
    for i in range(25):
        print(f'Iteration {i}')
        lst1=[random.randint(1,1000) for i in range(1000)]
        lst2 = lst1.copy()
    
        s1 = time.perf_counter()
        sorted(lst1)
        sorted_time = time.perf_counter() - s1
    
        s1 = time.perf_counter()
        lst2.sort()
        sort_time = time.perf_counter() - s1
    
        if sorted_time < sort_time:
            sorted_count += 1
        else:
            sort_count += 1
    print(f'sort_count is {sort_count}')
    print(f'sorted_count is {sorted_count}')
    


    아래는 출력

    sort_count is 22
    sorted_count is 3
    


    위의 실험에 따르면 같은 목록을 정렬하려고 할 때 정렬보다 정렬이 더 빠른 것 같습니다.

    반전 및 반전



    reverse() 및 reversed()는 각각 sort() 및 sorted()와 유사합니다. reverse()는 내장 파이썬 함수이고 reversed()는 목록 클래스의 제자리 메서드입니다. sorted()와 reversed()의 유일한 차이점은 sorted()는 목록 객체를 반환하는 반면 reversed()는 list()를 사용하여 목록에 typecase가 될 수 있는 list_reverseiterator 객체를 반환한다는 것입니다.

    위의 섹션에서 논의한 예제와 유사하기 때문에 예제를 보여주지 않을 것입니다. 성능 비교인 더 흥미로운 내용으로 넘어갈 것입니다.

    import time
    import random
    
    reverse_count = 0
    reversed_count = 0
    for i in range(25):
        print(f'Iteration {i}')
        lst1=[random.randint(1,1000) for i in range(1000)]
        lst2 = lst1.copy()
    
        s1 = time.perf_counter()
        reversed(lst1)
        reversed_time = time.perf_counter() - s1
    
        s1 = time.perf_counter()
        lst2.reverse()
        reverse_time = time.perf_counter() - s1
    
        if reversed_time < reverse_time:
            reversed_count += 1
        else:
            reverse_count += 1
    print(f'reversed_count is {reversed_count}')
    print(f'reverse_count is {reverse_count}')
    


    아래는 출력

    reversed_count is 0
    reverse_count is 25
    


    Reverse ()가 명확한 승자 인 것 같습니다.

    요약


  • sort() 및 reverse()는 목록 개체의 제자리 메서드이고 원래 목록을 업데이트합니다
  • .
  • sorted()는 요소가 정렬된 목록을 반환합니다.
  • reversed()가 list_reverseiterator 객체를 반환함
  • 위의 실험에 따르면 sort()는 sorted()보다 빠르고 reverse()는 reversed()보다 빠릅니다.
  • 좋은 웹페이지 즐겨찾기