특정 인덱스의 요소별로 목록/튜플을 정렬하려면 어떻게 해야 합니까?
목록 또는 튜플 목록에 다음과 같은 데이터가 있습니다.
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
그리고 부분 집합의 두 번째 요소를 기준으로 정렬하고 싶습니다.의미: 2,5,8로 정렬하는 경우2
에서 왔다(1,2,3)
,5
에서 왔다(4,5,6)
일반적인 방법은 무엇입니까?목록에 튜플 또는 목록을 저장해야 합니까?
sorted_by_second = sorted(data, key=lambda tup: tup[1])
또는 다음과 같이 입력합니다.
data.sort(key=lambda tup: tup[1]) # sorts in place
기본 정렬 모드는 오름차순입니다.내림차순으로 정렬하려면 다음 옵션을 사용합니다.
sorted_by_second = sorted(data, key=lambda tup: tup[1], reverse=True)
또는 다음과 같이 입력합니다.
data.sort(key=lambda tup: tup[1], reverse=True) # sorts in place
from operator import itemgetter
data.sort(key=itemgetter(1))
예를 들어, 태플의 두 번째 및 세 번째 요소를 기준으로 정렬할 경우,
data = [(1,2,3),(1,2,1),(1,1,4)]
예를 들어 우선순위를 나타내는 태플을 반환하는 람다를 정의합니다.
sorted(data, key=lambda tup: (tup[1],tup[2]) )
[(1, 1, 4), (1, 2, 1), (1, 2, 3)]
어레이를 하이에서 로우로 정렬하는 경우 Stephen의 답변에 추가하고 싶을 뿐입니다.상기 코멘트 이외의 다른 방법은, 이것을 행에 추가하는 것입니다.
reverse = True
결과는 다음과 같습니다.
data.sort(key=lambda tup: tup[1], reverse=True)
스티븐의 답변은 제가 쓰겠어요.완전성을 위해 리스트의 내용을 포함한 DSU(decorate-sort-undecorate) 패턴을 다음에 나타냅니다.
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
또는 보다 간결하게:
[b for a,b in sorted((tup[1], tup) for tup in data)]
Python Sorting HowTo에서 언급한 바와 같이, 이것은 Python 2.4 이후 주요 기능을 사용할 수 있게 된 이후 불필요했습니다.
튜플 목록을 정렬하려면(<word>, <count>)
,위해서count
내림차순으로word
알파벳 순으로:
data = [
('betty', 1),
('bought', 1),
('a', 1),
('bit', 1),
('of', 1),
('butter', 2),
('but', 1),
('the', 1),
('was', 1),
('bitter', 1)]
다음 방법을 사용합니다.
sorted(data, key=lambda tup:(-tup[1], tup[0]))
그 결과는 다음과 같습니다.
[('butter', 2),
('a', 1),
('betty', 1),
('bit', 1),
('bitter', 1),
('bought', 1),
('but', 1),
('of', 1),
('the', 1),
('was', 1)]
람다 없음:
def sec_elem(s):
return s[1]
sorted(data, key=sec_elem)
itemgetter()
보다 다소 빠르다lambda tup: tup[1]
단, 증가율은 비교적 미미합니다(10~25% 정도).
(IPython 세션)
>>> from operator import itemgetter
>>> from numpy.random import randint
>>> values = randint(0, 9, 30000).reshape((10000,3))
>>> tpls = [tuple(values[i,:]) for i in range(len(values))]
>>> tpls[:5] # display sample from list
[(1, 0, 0),
(8, 5, 5),
(5, 4, 0),
(5, 7, 7),
(4, 2, 1)]
>>> sorted(tpls[:5], key=itemgetter(1)) # example sort
[(1, 0, 0),
(4, 2, 1),
(5, 4, 0),
(8, 5, 5),
(5, 7, 7)]
>>> %timeit sorted(tpls, key=itemgetter(1))
100 loops, best of 3: 4.89 ms per loop
>>> %timeit sorted(tpls, key=lambda tup: tup[1])
100 loops, best of 3: 6.39 ms per loop
>>> %timeit sorted(tpls, key=(itemgetter(1,0)))
100 loops, best of 3: 16.1 ms per loop
>>> %timeit sorted(tpls, key=lambda tup: (tup[1], tup[0]))
100 loops, best of 3: 17.1 ms per loop
@Stephen의 대답은 딱 들어맞았다!여기 더 나은 시각화를 위한 예가 있습니다.
Ready Player One 팬들에게 외쳐주세요!=)
>>> gunters = [('2044-04-05', 'parzival'), ('2044-04-07', 'aech'), ('2044-04-06', 'art3mis')]
>>> gunters.sort(key=lambda tup: tup[0])
>>> print gunters
[('2044-04-05', 'parzival'), ('2044-04-06', 'art3mis'), ('2044-04-07', 'aech')]
key
는 비교를 위해 컬렉션의 항목을 변환하기 위해 호출되는 함수입니다.맘에 들다compareTo
method(Javava 。
키에 전달되는 파라미터는 호출 가능한 파라미터여야 합니다.여기에서는,lambda
는, 어나니머스 함수(콜 가능)를 작성합니다.
lamda의 구문은 단어 lamda 뒤에 반복 가능한 이름이 있고 단일 코드 블록이 있습니다.
아래 예시는 특정 이벤트와 배우 이름의 정보를 담고 있는 튜플 목록을 정렬하고 있습니다.
이 목록을 이벤트 발생 시간(태플의 0번째 요소)별로 정렬합니다.
주의 -s.sort([cmp[, key[, reverse]]])
을
코드에 다음과 같이 사용합니다.
#To sort the list based on each element's second integer (elem[1])
sorted(d2, key=lambda elem: elem[1])
정렬할 요소에 따라 이 요소를 다음 위치에 배치할 수중에 넣을 수 있습니다.
(elem[*insert the index of the element you are sorting it by*])
태플 정렬은 매우 간단합니다.
tuple(sorted(t))
언급URL : https://stackoverflow.com/questions/3121979/how-to-sort-a-list-tuple-of-lists-tuples-by-the-element-at-a-given-index
'source' 카테고리의 다른 글
PHP를 사용하여 MySQL 시간을 UNIX 타임스탬프로 변환하는 방법 (0) | 2022.10.29 |
---|---|
Vue.js - 선택한 항목 VM 바인딩이 작동하지 않음(bootstrap-vue)을 선택/드롭다운합니다. (0) | 2022.10.29 |
라라벨 5 웅변가 다수 대 다수 2차 테이블 (0) | 2022.10.29 |
mysql -> tbl에 삽입(다른 테이블에서 선택) 및 일부 기본값 (0) | 2022.10.29 |
mysql의 기존 열명으로 두 열을 하나로 합칠 수 있는 방법은 무엇입니까? (0) | 2022.10.20 |