이 목록을 정렬 할 수없는 이유는 무엇입니까?
문제
statlist = [('abc',5,1), ('bzs',66,1), ... ]
sorted(statlist, key=lambda x: int(x[1]))
나는 가장 큰 정수로 분류하고 싶습니다. 이 경우 5와 66. 그러나 작동하지 않는 것 같습니다.
해결책
그만큼 sorted
함수는 a 새로운 다음과 같은 기능 결과를 할당해야합니다.
new_list = sorted(statlist, key=lambda x: int(x[1]))
다른 팁
사용 .sort
제자리에 정렬을위한 메소드 :
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist.sort(key=lambda x: int(x[1]))
사용하고 싶다면 sorted
, 그런 다음 변수를 재 할당합니다.
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]))
내림차순으로 사용하십시오 reverse
:
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]), reverse=True)
그런 다음 사용하는 것이 좋습니다 itemgetter
대신 a lambda
:
import operator
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=operator.itemgetter(1), reverse=True)
.sort 함수로 전달, 키 및 역전 할 수 있습니다.
>>> x.sort(key=lambda x:x[1],reverse=True)
>>> x
[('bzs', 66, 1), ('abc', 5, 1)]
>>>
내적 분류 사용을 위해
statlist.sort(key=lambda x: x[1])
정렬 된 데이터 사용으로 다른 목록을 작성합니다
otherlist = sorted( statlist, key=lambda x: x[1] )
from operator import itemgetter
statlist = [('abc',5,1), ('bzs',66,1), ... ]
# statlist.sort modifiest the statlist, sorted returns a new one
# reverse puts the largest items to the front
statlist.sort(key=itemgetter(1), reverse=True)
Alex의 의견에 따라 SiNTed ()가 "정렬 함수처럼"작동한다고 생각했다.
"정렬 함수처럼"작동한다면 라이브러리에 넣을 것 같지 않습니다.
어쨌든 종류는 없습니다 기능 ... 당신은 정렬을 참조합니다 방법 목록 개체의.
대화식 통역사를 사용한 간단한 데모 :
>>> alist = [3, 2, 1]; x = alist.sort(); print x; print alist
None
[1, 2, 3]
>>> alist = [3, 2, 1]; x = sorted(alist); print x; print alist
[1, 2, 3]
[3, 2, 1]
다음은 팁입니다. 패턴과 유사점을 찾으십시오. 그러나 항상 직관적 인 외삽 법을 확인하십시오. 그 아이디어를 적용하고 싶을 수도 있습니다 reverse
그리고 reversed
.
>>> s = [('xyz', 8, 1), ('abc',5,1), ('bzs',66,1) ]
>>> s = sorted(s, key=lambda x: int(x[1]))
>>> s.reverse()
>>> print s
[('bzs', 66, 1), ('xyz', 8, 1), ('abc', 5, 1)]
헤이 어쨌든 배열에 무언가를 저장하고있을 때 나는 질서에 대해 걱정하는 경향이없고 결국 사용합니다. sorted()
예를 들어 이렇게 statlist = sorted(statlist)
그리고 당신이 그것을 원한다면 그것을 가장 크고 작은 것 statlist = sorted(statlist, reverse = True)
그것은 가장 큰 것보다 작은 것의 간단한 방법입니다!
내가 이것을 사용하는 곳에있는 코드 (추출물 만)
while i <= math.sqrt(intnum):
if (intnum % i) == 0:
numbers.insert(0,i)
numbers.insert(0,int(intnum/i))
print(i,":", int(intnum/i))
i += 1
numbers = sorted(numbers, reverse = True)