2014-10-01 55 views
1

我正在寫一個簡單的腳本在python 2.7接收多個數據集每秒通過UDP。然後將這些數據集中的每一個放入單獨的磁貼URL並打開它們。通過聲明,如果以前的磁鐵URL是相同的

很多時候,數據集可以與前一個數據集相同,因此我不想多次打開相同的磁貼URL。

這裏是我的代碼的一部分:

while True: 
    var = s.recv(30) 

    url = "magnet://myhost.com/{0}".format(var) 

    os.startfile(url) 

作爲一個例子,可以接收以下數據集:

a 
a 
a 
b 
b 
a 
a 
e 
e 
e 

本質上,如果兩個數據集是相同的,那麼生成相同的磁貼網址。在上面的示例中,我希望打開第一個磁貼URL(a),但跳過(傳遞)接下來的兩個a。然後打開第一個b URL,但跳過下一個b。如果再次發送數據集a,則打開第一個數據集,但跳過以下a。等等等等。

我猜我可以使用一個if/else和一個通過語句,但我不知道如何。有任何想法嗎?

回答

0

好吧,如果你只需要跳過一個值,如果它是同前一個,只需使用一個簡單的變量來保持跟蹤它:

old = None 
while True: 
    var = s.recv(30) 
    if var != old: 
     old = var 
     url = "magnet://myhost.com/{0}".format(var) 
     os.startfile(url) 
0

您可以構建先前看到的項目的set

seen = set() 
while True: 
    var = s.recv(30) 
    if var not in seen: 
     url = "magnet://myhost.com/{0}".format(var) 
     os.startfile(url) 
     seen.add(var) 
+0

這似乎工作。但是,如果我得到一個「a」,然後是「b」,然後是「a」的數據集,那麼第二個「a」不起作用,因爲它已經被看到了。 – ujeqaf 2014-10-01 07:09:48

+0

哦,那麼我誤解了你的問題,而@ figs的回答其實是正確的,應該被取消刪除。 – 2014-10-01 08:24:53