Python에서 람다로 정렬하는 방법
다음과 같이 속성별로 값을 정렬하려고 합니다.
a = sorted(a, lambda x: x.modified, reverse=True)
다음 오류 메시지가 나타납니다.
<lambda>() takes exactly 1 argument (2 given)
왜요? 어떻게 고치죠?
이 질문은 원래 Python 2.x용으로 작성되었습니다.3.x 에서는, 에러 메세지가 다릅니다.TypeError: sorted expected 1 argument, got 2
.
사용하다
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
Python 2.x에서는sorted
함수는 다음 순서로 인수를 받습니다.
sorted(iterable, cmp=None, key=None, reverse=False)
그래서 이 없이key=
, 전달된 함수는 다음과 같이 간주됩니다.cmp
2개의 인수를 받는 함수입니다.
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
다음과 같이 인쇄됩니다.
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
람다 함수와 함께 주요 함수를 사용하려고 합니다.
Python 및 C# 또는 F#과 같은 다른 언어들은 lambda 함수를 사용합니다.
또, 주요 기능에 대해서는, 또, 설명서에 따라서도,
list.sort()와 sorted() 모두 비교하기 전에 각 목록 요소에서 호출할 함수를 지정하는 키 파라미터가 있습니다.
...
key 매개 변수의 값은 단일 인수를 사용하고 정렬 목적으로 사용할 키를 반환하는 함수여야 합니다.키 함수는 각 입력 레코드에 대해 정확히 한 번 호출되므로 이 기술은 빠릅니다.
따라서 키 함수에는 파라미터 키가 있으며 실제로 람다 함수를 수신할 수 있습니다.
Real Python에는 사용 방법의 좋은 예가 있습니다.예를 들어 다음과 같은 리스트가 있다고 합시다.
ids = ['id1', 'id100', 'id2', 'id22', 'id3', 'id30']
그 '고유'를 정리하고 싶다.그러면 이렇게 하는 거예요.
sorted_ids = sorted(ids, key=lambda x: int(x[2:])) # Integer sort
그걸 인쇄하면
['id1', 'id2', 'id3', 'id22', 'id30', 'id100']
당신의 특별한 경우, 당신은 단지 쓸 것이 없습니다.key=
람다보다 전에.따라서 다음을 사용하는 것이 좋습니다.
a = sorted(a, key=lambda x: x.modified, reverse=True)
Python3의 경우:
from functools import cmp_to_key
def compare(i1,i2):
return i1-i2
events.sort(key=cmp_to_key(compare))
이 예에서는 다음을 이해할 수 있습니다.
예 1:
a = input()
a = sorted(a, key = lambda x:(len(x),x))
print(a)
입력:["tim", "bob", "anna", "steve", "john","aaaa"]
출력:['bob', 'tim', 'aaaa', 'anna', 'john', 'steve']
입력:["tim", "bob", "anna", "steve", "john","aaaaa"]
출력:['bob', 'tim', 'anna', 'john', 'aaaaa', 'steve']
예 2(상세):
a = ["tim", "bob", "anna", "steve", "john","aaaaa","zzza"]
a = sorted(a, key = lambda x:(x[-1],len(x),x))
print(a)
출력:['anna', 'zzza', 'aaaaa', 'bob', 'steve', 'tim', 'john']
결론:
key = lambda x:(p1,p2,p3,p4,...,pn)
,
x
는 입력 스트림에서 한 번에 하나의 요소입니다.
p1,p2,p3...pn
요소의 흐름을 정렬해야 하는 기본 속성입니다.
우선순위에 따라p1>p2>p3>...>pn
.
리버스도 추가 가능=True는 정렬 조건 후에 요소를 역순으로 정렬합니다.
Python3에서 lamda를 사용하여 정렬된 함수의 또 다른 훌륭한 예.
# list of sport teams with wins and losses
sportTeams = [("Royals", (18, 12)), ("Rockets", (24, 6)),
("Cardinals", (20, 10)), ("Dragons", (22, 8)),
("Kings", (15, 15)), ("Chargers", (20, 10)),
("Jets", (16, 14)), ("Warriors", (25, 5))]
# sort the teams by number of wins
sortedTeams = sorted(sportTeams, key=lambda t: t[1][0], reverse=True)
print(sortedTeams)
출력:
[('Warriors', (25, 5)), ('Rockets', (24, 6)), ('Dragons', (22, 8)), ('Cardinals', (20, 10)), ('Chargers', (20, 10)), ('Royals', (18, 12)), ('Jets', (16, 14)), ('Kings', (15, 15))]
언급URL : https://stackoverflow.com/questions/3766633/how-to-sort-with-lambda-in-python
'programing' 카테고리의 다른 글
이삭이 나기 전에 Accessing Laravel .env 변수다. (0) | 2022.09.22 |
---|---|
Java 스트림에서 flush()의 목적은 무엇입니까? (0) | 2022.09.22 |
HashSet.removeAll 메서드가 놀라울 정도로 느리다. (0) | 2022.09.22 |
ISO 8601 형식의 날짜를 해석하려면 어떻게 해야 합니까? (0) | 2022.09.22 |
AngularJS 1.2$injector: 모듈러 (0) | 2022.09.22 |