목록을 대기열로 변환하는 방법은 무엇입니까? 따라서 대기열에 넣기 또는 대기열에서 빼기와 같은 작업을 수행해야합니다. 가장 큰 값을 제거하기 위해 목록에 사용하려면 큐를 사용하여 수행 할 수 있다고 생각합니다.목록을 파이썬에서 대기열로 변환 할 수 있습니까?
답변
목록을 대기열로 사용할 수 있습니다. fifo 대기열을 원하면 .append()
을 추가하고 .pop(0)
을 제거하면됩니다. 라이프 큐 (예 : 스택)의 경우 추가하려면 .append()
을, 제거하려면 .pop()
을 사용하십시오.
이 목적으로 특별히 설계된 FIFO를 구현할 때는 collections.deque을 사용해야합니다. .pop(0)
은 O (n) 연산입니다. 목록을 스택으로 사용하는 것은 괜찮습니다.
FIFO 큐 :
In [1]: q = range(15)
In [2]: q.pop(0)
Out[2]: 0
In [3]: q.pop(0)
Out[3]: 1
In [4]: q.pop(0)
Out[4]: 2
LIFO 큐 :
이In [5]: q = range(10)
In [6]: q.pop()
Out[6]: 9
In [7]: q.pop()
Out[7]: 8
In [8]: q.pop()
Out[8]: 7
단지리스트의 전면에서 pop()
>>> x = [1,2,3]
>>> x.pop(0)
1
>>> x
[2,3]
그것의 천천히, 모든 요소는 왼쪽으로 이동해야합니다. –
팝업을 사용하는 모든 참조 매우 효율적이지 않다 목록을 업데이트해야합니다.
deque 그것이 정말 잘 추출되지 비록 효율적으로
>>> from collections import deque
>>> deque([1,2,3,4])
deque([1, 2, 3, 4])
collections.deque 표준 대답은, 당신이 작업처럼 대기 할 수 있습니다.
더 나은 추상화를 위해 약간의 속도를 희생하려는 경우에도 https://pypi.python.org/pypi/linked_list_mod/이 있습니다. collections.deque가 빠릅니다. linked_list_mod를 사용하면 반복자를 생성자에 전달할 수 있습니다. 제공된 lifo 및 fifo 모듈은 그렇지 않지만 쉽게 수정 될 수 있습니다.
queue.Queue
을 사용하면서이 질문에 대한 답변을 찾고 있었기 때문에 제 연구 결과를 공유해야한다고 생각했습니다. queue.queue
을 사용하여 목록을 대기열로 변환 할 수 있습니다. 이 코드를 실행 한 후
import queue
l = [i for i in range(1000)]
q = queue.Queue()
[q.put(i) for i in l]
q2 = queue.Queue()
q2.queue = queue.deque(l)
, q
및 q2
는 동일한 항목을 포함 두 개의 서로 다른 큐하지만, 300 배 빠른 내 컴퓨터에있는 두 번째 방법>으로.
q
이 queue.Queue
인 경우 질문에 해당하지 않지만 그 반대는 l = list(q.queue)
으로 수행 할 수 있습니다. 희망이 당신에게 몇 가지 문제를 절약 할 수 있습니다!
이것은 모두 파이썬 3.5.2에서 테스트되었습니다.
- 1. 목록을 대기열로 변환
- 2. 목록을 파이썬에서 사전으로 변환
- 3. 파이썬에서 문자열을 변환 할 수 있습니까?
- 4. 파이썬에서 어떻게 문자열을리스트로 변환 할 수 있습니까?
- 5. 목록을 파이썬에서 HTML 테이블로 변환
- 6. 파이썬에서 증기 서버 목록을 검색 할 수 있습니까?
- 7. 어떻게 파이썬에서 수레 목록 목록을 구문 분석 할 수 있습니까?
- 8. 파이썬에서 문자열로 변환 할 수없는 유형이 있습니까?
- 9. 문자열 목록을 파이썬에서 유니 코드 문자로 변환
- 10. 어떻게 파이썬에서 부동 소수점 숫자를 정수로 변환 할 수 있습니까?
- 11. 파이썬에서 "\ u0096"과 같은 문자를 어떻게 변환 할 수 있습니까?
- 12. 어떻게 파이썬에서 이스케이프 된 문자를 변환 할 수 있습니까?
- 13. 파이썬에서 어떻게 문자열을 명령으로 변환 할 수 있습니까?
- 14. 어떻게 파이썬에서 마크 업없이 HTML을 텍스트로 변환 할 수 있습니까?
- 15. 어떻게 문자를 파이썬에서 정수로 변환 할 수 있습니까?
- 16. Python 목록을 timeSeries로 변환 할 수 없습니다
- 17. 메시지가 오류 대기열로 이동하면 Nservicebus에서 이벤트를 게시 할 수 있습니까?
- 18. 파이썬에서 목록을 삭제하는 방법이 있습니까?
- 19. 어떻게 C# 목록을 해시 가능으로 변환 할 수 있습니까?
- 20. PHP 함수의 매개 변수 목록을 배열로 변환 할 수 있습니까?
- 21. 어떻게 일반 목록을 dataTable로 변환 할 수 있습니까?
- 22. 어떻게 장고 queryset 목록을 사전으로 변환 할 수 있습니까?
- 23. 코드를 사용하여 'list'형식의 목록을 변환 할 수 있습니까? "translation"?
- 24. 어떻게 dict_keys 목록을 정수로 변환 할 수 있습니까?
- 25. 어떻게 문자열 목록을 숫자 값으로 변환 할 수 있습니까?
- 26. 어떻게 C# 다차원 목록을 VB.Net으로 변환 할 수 있습니까?
- 27. 배열 목록을 문자열로 변환 할 수 없습니다
- 28. 누군가가이 코드를 변환 할 수 있습니까
- 29. VBA에서 dll을로드 할 수 있습니까? 파이썬에서 어떻게 할 수 있습니까?
- 30. 파이썬에서 함수를 forward-declare 할 수 있습니까?
큰 목록의 경우 list_.pop (0)이 느립니다. – dstromberg
@dstromberg 나는 그것이 내 대답에 내포되어 있다고 믿는다. – msvalkon