이것은 질문의 확장자는 What's the most Pythonic way to identify consecutive duplicates in a list?입니다.Python 3 : 정렬 된 목록에서 연속적인 실행을 역순으로합니까?
my_list = [(1,4), (2,3), (3,2), (4,4), (5,2)]
하고 각 튜플의 마지막 값을 분류 :
는 튜플의 목록이 있다고 가정my_list = sorted(my_list, key=lambda tuple: tuple[1])
# [(3,2), (5,2), (2,3), (1,4), (4,4)]
우리는 각각의 마지막 값을보고 두 개의 연속 실행을 (이 튜플), 즉 [(3,2), (5,2)]
및 [(1,4), (4,4)]
.
각 실행 (터플이 아닌)을 역전시키는 비유의 방법은 무엇입니까?
reverse_runs(my_list)
# [(5,2), (3,2), (2,3), (4,4), (1,4)]
발전기 내에서 가능합니까?
UPDATE는
그것은 아마도 예를 들어 목록이 명확하지 않았다 나의주의에왔다. 그래서 그 대신 고려 : TimSort
을 기술에 사용되는
my_list = [(1,"A"), (2,"B"), (5,"C"), (4,"C"), (3,"C"), (6,"A"),(7,"A"), (8,"D")]
reverse_runs
에서 이상적인 출력
[(7,"A"), (6,"A"), (1,"A"), (2,"B"), (3,"C"), (4,"C"), (5,"C"), (8,"D")]
이 용어에 명확하게하는 것입니다 경우, 내가 뭘 파이썬이다 "실행"의 사용을 채택하고 sort 함수는 그 안전성 (sort 함수)을 기반으로합니다. 두 요소가 지정된 차원의 같은을 경우
따라서 당신이 종류의 콜렉션에, 컬렉션,다면 다음에만 지정된 차원이 및에 정렬 할 필요가있는 경우, 그 순서는 을 것이다 아니 변경할 수 있습니다.
따라서 다음의 기능 :
sorted(my_list,key=lambda t: t[1])
수율 :
[(1, 'A'), (6, 'A'), (7, 'A'), (2, 'B'), (5, 'C'), (4, 'C'), (3, 'C'), (8, 'D')]
및 "C"
(즉 (5, 'C'), (4, 'C'), (3, 'C')
)의 실행을 방해하지 않는다.
따라서 결론적으로 아직에서 원하는 출력을 정의하는 함수 reverse_runs
:
1)가 제 1 요소의 순서를 유지하는 자신의 마지막 요소
2)에 의해 튜플 정렬, 실행 반전 마지막 요소에
이상적으로는 발전기 기능에서이 기능을 사용하고 싶지만, 그 순간에는 가능하지 않습니다.
1 :
따라서 하나는 다음과 같은 전략을 채택 할 수있다.) 튜플을 마지막 요소로 정렬sorted(my_list, key=lambda tuple: tuple[1])
2. 후속 튜플 (i + 1)이 (i)의 마지막 요소와 다른 경우 각 튜플의 마지막 요소에 대한 인덱스를 식별합니다. 즉, 내가이 일을 생각 빈리스트
두 번의 연속 실행으로 무엇을 의미합니까? –
@WillemVanOnsem은 정렬 키에 중복됩니다. –
그는 각 튜플의 두 번째 요소가 런이라고 정의했다고 생각합니다. 그래서 [(1,2), (2,2), (3,2)]는 3의 실행입니다. – blacksite