#Day19 - 정렬과 정렬, 역순과 역순의 성능 비교
정렬 및 정렬
정렬과 정렬은 모두 목록의 요소를 정렬하는 데 사용됩니다. 두 가지 차이점이 있습니다
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 ()가 명확한 승자 인 것 같습니다.
요약
Reference
이 문제에 관하여(#Day19 - 정렬과 정렬, 역순과 역순의 성능 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rahulbanerjee99/day19-comparing-the-performance-of-sorting-vs-sorted-and-reverse-vs-reversed-35i6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)