나는 그들 각각이 같은 start
및 end
특성이 개체의 목록이 : 내가 그들을 주문하려는파이썬에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
Item 0:
Start: 1
End: 12
Item 1:
Start: 6
End: 3
Item 2:
Start: 12
End: 6
을되도록 전에 오는 하나 자체 후 각 항목의 start
및 end
경기에서 새로운 목록.
[Item 0] [Item 2] [Item 1]
[1 12] [12 6] [6 3]
.
위와 같이 2 개의 관련없는 목록이 있으므로 혼합 된 목록을 2 개 만들어야합니다. 그러면 위의 그림과 같이 올바른 순서가 지정됩니다.
나는 "brute-force"를 구현하여 이러한 목록을 작성하기 위해 많은 쿼리를 수행하기 시작할 것이지만 누군가가이 문제를 해결할 더 우아한 방법이 있는지 물어보고 싶다. 나는 이런 종류의 문제가 얼마나 흔한 지 잘 모르겠지만 전에 이것을 보았던 기억이있다. 아마도이 문제를 다루는 패턴이있을 것이다. 요소 중복 항목을 제시하지 주문
items_by_start = dict((i.start, i) for i in your_items)
ordered_items = [your_items[0]]
for _ in xrange(len(your_items)-1):
ordered_items.append(items_by_start[ordered_items[-1].end])
또한 중복 된 '시작'이 없다고 가정합니다. –
고마워요, 나는 이것을 시도 할 것입니다. 나는 이것이 같은 그룹에있는 2 개의 독립적 인리스트를 걱정하지 않을 것이라고 생각한다. –
@JoanVenge 두 개의 개별 목록이있는 경우 루프 반복 횟수와 관련된 문제가 발생합니다. 당신은 약간 더 복잡한 논리를 사용해야 할 것입니다. – Amber