'sorted(list)'와 'list.sort()'의 차이점은 무엇입니까?
list.sort()목록을 하며, 는 원래 목록을 대체합니다.sorted(list)원래 목록을 변경하지 않고 정렬된 목록 복사본을 반환합니다.
- 어느 쪽이 다른 쪽보다 더 좋은 때는 언제입니까?
- 어느 쪽이 더 효율적이죠?얼마만큼?
- 는 상태로 수 ?
list.sort()수되????
sorted()는 원래 목록은 영향을 받지 않고 정렬된 새 목록을 반환합니다. list.sort()목록을 정렬하여 목록 인덱스를 변환하고 반환한다.None( ( ( ( ( ( ( ( ( ( )
sorted()목록뿐만 아니라 반복할 수 있는 항목에서도 작동합니다.문자열, 튜플, 사전(키를 얻을 수 있음), 생성기 등 모든 요소가 포함된 목록을 정렬하여 반환합니다.
list.sort()는, 「」를 참조해 주세요.sorted()을 사용하다sorted()아직 목록이 아닌 반복 가능한 것을 분류하고 싶을 때., 「」는,
list.sort()sorted()복사본을 만들 필요가 없기 때문입니다.다른 어떤 반복도, 당신은 선택의 여지가 없어요.아니요, 원래 위치를 검색할 수 없습니다.했을 때
list.sort()이치노
sorted(list)»list.sort()
list.sort하여 반환한다.Nonesorted모든 반복 가능 항목을 가져와서 정렬된 새 목록을 반환합니다.
sorted이 Python하지만 C "Python"에되어 있는 C: "" 내장 는 상당히 됩니다.
def sorted(iterable, key=None):
new_list = list(iterable) # make a new list
new_list.sort(key=key) # sort it
return new_list # return it
어떤 것을 사용해야 합니까?
list.sort원래의 정렬 순서를 보관 유지하고 싶지 않은 경우(따라서 리스트는 메모리에서 in-place로 재사용할 수 있습니다).또, 리스트의 유일한 소유자인 경우(리스트가 다른 코드로 공유되어 뮤트 되고 있는 경우는, 그 리스트가 사용되고 있는 버그가 발생할 가능성이 있습니다).sorted원래 정렬 순서를 유지하거나 로컬 코드만 소유하는 새 목록을 작성하려는 경우.
list.sort() 뒤에 목록의 원래 위치를 가져올 수 있습니까?
아니요 - 사용자가 직접 복사하지 않은 경우 정렬이 내부에서 수행되므로 해당 정보는 손실됩니다.
"어느 쪽이 빠를까요?얼마나 더 빨라졌습니까?"
새 목록을 만들 때 발생하는 불이익을 설명하기 위해 시간 모듈을 사용합니다. 설정은 다음과 같습니다.
import timeit
setup = """
import random
lists = [list(range(10000)) for _ in range(1000)] # list of lists
for l in lists:
random.shuffle(l) # shuffle each list
shuffled_iter = iter(lists) # wrap as iterator so next() yields one at a time
"""
여기에 랜덤으로 정렬된 10000개의 정수 목록에 대한 결과가 나와 있습니다.여기서 알 수 있듯이 오래된 목록 작성 비용의 신화가 틀렸습니다.
파이썬 2.7
>>> timeit.repeat("next(shuffled_iter).sort()", setup=setup, number = 1000)
[3.75168503401801, 3.7473005310166627, 3.753129180986434]
>>> timeit.repeat("sorted(next(shuffled_iter))", setup=setup, number = 1000)
[3.702025591977872, 3.709248117986135, 3.71071034099441]
파이썬 3
>>> timeit.repeat("next(shuffled_iter).sort()", setup=setup, number = 1000)
[2.797430992126465, 2.796825885772705, 2.7744789123535156]
>>> timeit.repeat("sorted(next(shuffled_iter))", setup=setup, number = 1000)
[2.675589084625244, 2.8019039630889893, 2.849375009536743]
피드백을 받은 후, 저는 다른 특성을 가진 다른 테스트가 바람직하다고 판단했습니다.여기서 1,000번 반복할 때마다 길이가 100,000인 동일한 랜덤 순서 목록을 제공합니다.
import timeit
setup = """
import random
random.seed(0)
lst = list(range(100000))
random.shuffle(lst)
"""
나는 이 더 큰 종류의 차이는 Martijn이 말한 카피에서 나온 것이라고 해석하지만, 이것은 더 오래된 인기 있는 답변에서 언급된 점까지 지배하지 않는다, 여기서 시간 증가는 약 10%에 불과하다.
>>> timeit.repeat("lst[:].sort()", setup=setup, number = 10000)
[572.919036605, 573.1384446719999, 568.5923951]
>>> timeit.repeat("sorted(lst[:])", setup=setup, number = 10000)
[647.0584738299999, 653.4040515829997, 657.9457361929999]
, 의 내용을 소트로서 , 새로운 「」의 「신규」는 「신규」의 「신규」의 「신규」로 .sorted복사 버전은 1000길이로도 실행 시간이 2% 정도 더 걸립니다.
Poke는 자신의 코드도 실행했습니다. 코드는 다음과 같습니다.
setup = '''
import random
random.seed(12122353453462456)
lst = list(range({length}))
random.shuffle(lst)
lists = [lst[:] for _ in range({repeats})]
it = iter(lists)
'''
t1 = 'l = next(it); l.sort()'
t2 = 'l = next(it); sorted(l)'
length = 10 ** 7
repeats = 10 ** 2
print(length, repeats)
for t in t1, t2:
print(t)
print(timeit(t, setup=setup.format(length=length, repeats=repeats), number=repeats))
그는 1000000 길이 정렬에서도 비슷한 결과를 얻었지만, 시간은 약 5% 증가했을 뿐입니다.그 결과는 다음과 같습니다.
10000000 100
l = next(it); l.sort()
610.5015971539542
l = next(it); sorted(l)
646.7786222379655
결론:
" "로 sorted복사본을 만드는 것은 차이를 지배하지만 정렬 자체가 작업을 지배하고 이러한 차이를 중심으로 코드를 구성하는 것은 시기상조입니다.나는 사용할 것이다.sorted할 때, 는 '데이터 정렬 리스트'를 합니다.list.sort목록을 정렬해야 할 때, 그리고 그 결과에 따라 사용법이 결정됩니다.
가장 큰 차이점은 이다.sorted(some_list)는 새로운 것을 반환합니다.
a = [3, 2, 1]
print sorted(a) # new list
print a # is not modified
★★★★★★★★★★★★★★★★★」some_list.sort()는 목록을 정렬합니다.
a = [3, 2, 1]
print a.sort() # in place
print a # it's modified
주의해 주세요.a.sort()print a.sort()합니다.를 인쇄합니다.None.
list.sort() 뒤에 원래 위치를 가져올 수 있습니까?
아니요, 원래 목록을 수정하기 때문입니다.
다음으로 동작의 차이를 확인할 수 있는 간단한 예를 몇 가지 나타냅니다.
다음 번호 목록을 참조하십시오.
nums = [1, 9, -3, 4, 8, 5, 7, 14]
" " 를 할 sorted 리스트에서는, 「 」의sorted리스트의 카피가 작성됩니다.(즉, 원래 리스트는 변경되지 않습니다.)
어디 보자.
sorted(nums)
돌아온다
[-3, 1, 4, 5, 7, 8, 9, 14]
을 보다nums 하다
nums
원래의 리스트가 표시됩니다(변경되지 않고 정렬되지 않음). sorted하지 않았습니다.
[1, 2, -3, 4, 8, 5, 7, 14]
같은 똑같이 가져가다하는 것은nums목록과 목록 및 적용을 적용하는sort그것에 기능, 실제 목록을 바꿀 것이다.기능을 사용하면 실제목록이 변경됩니다.
어디 보자.
우리 델부터에 출발하는 것nums목록 확인한 내용은 아직도 여전합니다동일한지 확인합니다 내용이목록이 표시되어.
nums
[-3, 1, 4, 5, 7, 8, 9, 14]
nums.sort()
이것으로 원래의 번호 리스트가 변경되어 번호를 보면, 원래의 리스트가 변경되어 있습니다.
nums
[-3, 1, 2, 4, 5, 7, 8, 14]
주의: sort()와 sorted()의 가장 간단한 차이점은 sort()는 값을 반환하지 않는 반면 sort()는 반복 가능한 목록을 반환한다는 것입니다.
sort()는 값을 반환하지 않습니다.
sort() 메서드는 지정된 목록의 요소를 특정 순서(Ascending 또는 Descending)로 정렬할 뿐 값을 반환하지 않습니다.
sort() 메서드의 구문은 다음과 같습니다.
list.sort(key=..., reverse=...)
또는 Python의 내장 함수 sorted()를 같은 목적으로 사용할 수도 있습니다.정렬된 함수 반환 정렬된 목록
list=sorted(list, key=..., reverse=...)
.sort() 함수는 새 목록의 값을 목록 변수에 직접 저장하므로 세 번째 질문에 대한 답변은 "아니오"입니다.또한 sorted(list)를 사용하여 이 작업을 수행할 경우 목록 변수에 저장되지 않으므로 사용할 수 있습니다.또한 .sort() 메서드가 함수로 동작하거나 인수를 받는 경우도 있습니다.
sorted(목록) 값은 변수에 명시적으로 저장해야 합니다.
또한 짧은 데이터 처리 속도에는 차이가 없습니다.단, 긴 목록의 경우 빠른 작업에는 .sort() 메서드를 직접 사용해야 합니다.단, 되돌릴 수 없는 액션이 발생합니다.
list.sort()에서는 목록 변수를 변경하지만 sorted(list)에서는 변수를 변경하지 않습니다.
정렬 사용:
list = [4, 5, 20, 1, 3, 2]
list.sort()
print(list)
print(type(list))
print(type(list.sort())
반환할 내용:
[1, 2, 3, 4, 5, 20]
<class 'NoneType'>
그러나 sorted()를 사용하는 경우:
list = [4, 5, 20, 1, 3, 2]
print(sorted(list))
print(list)
print(type(sorted(list)))
반환할 내용:
[1, 2, 3, 4, 5, 20]
[4, 5, 20, 1, 3, 2]
<class 'list'>
언급URL : https://stackoverflow.com/questions/22442378/what-is-the-difference-between-sortedlist-vs-list-sort
'programing' 카테고리의 다른 글
| MySQL에서 외부 키 제약 조건을 추가할 수 없음 (0) | 2022.09.04 |
|---|---|
| 부동 데이터 유형과 10진 데이터 유형의 차이 (0) | 2022.09.04 |
| 익명 클래스에 대한 다중 상속 (0) | 2022.09.04 |
| Python에서 문자열 서브스트링을 가져오려면 어떻게 해야 하나요? (0) | 2022.09.04 |
| 어느 쪽이 더 효율적인가:MySQL 테이블이 여러 개입니까, 아니면 하나의 큰 테이블입니까? (0) | 2022.09.04 |