나는이 양식 입력을 처리하는 우선 순위 큐 만들기 위해 노력하고 있어요 :우선 순위 큐에서 동일한 우선 순위를 가진 항목을 처리하는 방법은 무엇입니까? (파이썬)
enqueue 2 2
enqueue 1 3
enqueue 5 1
enqueue 6 2
dequeue
dequeue
dequeue
dequeue
나는 목록을 사용하여이 코드를 가지고 :
는from queue import Queue
data=[]
while True:
try:
operation = input()
except:
break
data.append(operation.split(" "))
data2=[]
data3=[]
for i in data: #split enqueue and dequeue as not to get an out of range error
if "enqueue" in i:
data2.append(i)
else:
data3.append(i)
data2=sorted(data2,key=lambda x: int(x[2]))
data2=data2[::-1]
data=data2+data3 #merged the two again after sorting
q=[]
for i in data:
if "enqueue" in i: #add the item by the already sorted order of priority
q.append(i[1])
if "dequeue" in i: #print the first item dequeued before removing it from the queue
print (q[0])
del q[0]
이 나의 문제는이다 출력 :
1
6
2
5
대신 2 기술적 6 전에 대기열 이후 (및 그 우선 순위를 갖는 상품의 경우, 그들은 FIFO를 따라야 대기열 구조)
1
2
6
5
이 문제를 해결할 수있는 사람이 있습니까? 목록 대신 대기열을 사용하여이를 해결할 수있는 다른 방법이 있습니까? 감사!
나는 그것이 정말 열심히 코드를 따라 찾는거야. 어쨌든 파이썬 정렬은 * 안정적입니다. 즉, 같은 키를 가진 요소의 순서를 바꾸지 않기 때문에 문제가 다른 곳에 있습니다 (아마도 여러 개의 목록을 병합하거나 정렬 키가 동일하지 않을 수도 있습니다). – NPE
주목! 나는 코드를 더 읽기 쉽도록하기 위해 코드에 주석을 추가했다. :) – William