'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
하여 반환한다.None
sorted
모든 반복 가능 항목을 가져와서 정렬된 새 목록을 반환합니다.
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 |