我有三臺發電機。每一個按照時間順序產生結果/事件。
我想要做的是找出哪三個發電機有下一個(年代)的事件。 我的一種方法是從每個生成器獲取一個事件的列表,以及它來自哪個生成器。然後,對列表進行排序,獲取第一個事件,並將相應生成器的下一個事件添加到我的列表中。
有沒有更好/更高效/標準的方式來處理這個問題?從多臺發電機獲取第一個事件
1
A
回答
1
既然你沒有給出具體的例子,我只能給你提供一些想法/僞代碼。這個想法是在內存中至多保存n
迭代器中的n
項,因爲每個迭代器都會產生按時間順序排序的對象。插入/從PriorityQueue
將會比反覆排列列表更快。
from Queue import PriorityQueue
def yield_chronologically(iterators):
'iterators: list of iterator objects'
PQ = PriorityQueue()
# put first n items
for i, it in enumerate(iterators):
try:
nxt = next(it)
# this is where you have to determine the priority
# with a function get_chronological_key you have yet to write
chronological_key = get_chronological_key(nxt)
PQ.put(chronological_key, (i, nxt))
except StopIteration:
pass
# yield items and insert next item from iterator that was taken from
# into the PQ
while not PQ.empty():
_, (i, nxt) = PQ.get()
yield nxt
try:
nxt = next(iterators[i])
chronological_key = get_chronological_key(nxt)
PQ.put(chronological_key, (i, nxt))
except StopIteration:
pass
+1
謝謝。我認爲必須有一個「標準」的方式來處理這個問題。 –
+0
@GreeTreePython沒問題。爲了使函數更一般化,可以將其定義爲採用第二個參數'key_function',該函數是應用於由迭代器生成的對象以確定優先隊列插入點的函數。即'key = key_function(nxt)'。 – timgeb
相關問題
- 1. 的Xtext多臺發電機
- 2. 如何從第一臺相機獲取另一臺相機的外部參數?
- 3. 一臺電腦上的多個主機
- 4. 從EditText獲取下一個事件
- 5. 從多臺計算機(powershell)獲取最新日誌文件
- 6. 多發電機
- 7. 從多個複選框中獲取電子郵件ID到一個數組發送電子郵件
- 8. 爲什麼第二個產量第一返回該發電機
- 9. 從有多個事件的表中獲取唯一記錄
- 10. 獲取從第一個電話的諾言
- 11. LinkedinAPI:從第一個連接獲取電話號碼?
- 12. 從camera.main屬性獲取第二臺相機
- 13. 如何在第一次自動觸發事件後觸發第二個事件
- 14. 從一個活動發送一個事件到多個片段
- 15. 從發電機調用發電機
- 16. 貪婪不捕獲第一個事件
- 17. 從事件觸發器獲取ID
- 18. 將事件從一個事件發射器轉發到另一個事件
- 19. 電話關機時觸發事件嗎?
- 20. 問題在第一臺機器發出信號後在第二臺機器上打開一個新的GUI
- 21. 從多臺電腦收集文件到一個
- 22. 如何從表中獲取第一個和其他隨機行
- 23. 通過Jquery從電臺獲取價值
- 24. 第二個UITouch事件觸發器第一個UITouch事件爲什麼?
- 25. 如何從多臺機器開發?
- 26. 從手機中獲取多個圖像?
- 27. 從GridView發送多個電子郵件
- 28. OnClick事件只獲取第一個動態創建的行/ ID
- 29. 獲取MouseLeave事件後鼠標懸停的第一個元素
- 30. 防止第二個事件觸發時,第一個無效+ asp.net
你能舉個例子嗎? – Netwave