簡體   English   中英

檢查元素是否已經在列表中?

[英]check if element is in list already?

我有一個列表列表,如下所示:

aList= [['192.168.1.3', '0080.4522.ad08', '2013/05/02 19:10:10', 'automatic'],
['192.168.1.2', '0080.4522.ad08', '2013/05/02 19:05:00', 'automatic']]

當添加另一個列表時,我想在添加它們之前檢查ip或mac地址是否在另一個列表中,如果它們已經在列表列表中,我不想添加它們。 例如,如果我正在測試192.168.1.3,則不會將其添加到列表中,因為該元素已經存在。 因此,我可能試圖再次添加此列表,但我希望它失敗:

['192.168.1.3', '0080.4522.ad08', '2013/05/02 19:10:10', 'automatic']

我一直在做的方式是遍歷列表,並在找到元素后設置一個布爾值,但是我覺得這種方式不是很好。 你會怎么做? 我知道IP永遠是每個列表中的元素之一,但是依賴索引似乎也做事不好。

您可以使用any

>>> lis = ['192.168.1.3', '0080.4522.ad08', '2013/05/02 19:10:10', 'automatic']
if any(item[0] == lis[0] or item[1] == lis[1]  for item in aList)
    #then don't add
else:
    #add

解決此問題的一種好方法是使用對象,並使列表成為對象列表,而不是列表/元組列表。 然后,您可以覆蓋對象的比較功能,並使用常規的“ in”語句。

class Client:
    def __init__(self,  ip, mac, timedate, mode):
        self.ip = ip
        self.mac = mac
        self.timedate = timedate
        self.mode = mode

    def __eq__(self, object):
        if type(object) != type(self):
            return False

        if object.ip == self.ip or object.mac == self.mac
            return True
        return False

然后您可以做類似的事情

client = Client("127.0.0.1", "abwdds", date, mode)
if client not in list:
    doSomething()
    list.append(client)

如果IP地址是數據的關鍵列,則應使用字典將IP地址與其他列映射到元組(或列表)。

使用字典來保持您的連接。

cons = [{'IP':'192.168.1.3', 'MAC':'0080.4522.ad08', 'timestamp':'2013/05/02 19:10:10', 'type':'automatic'},
        {'IP':'192.168.1.2', 'MAC':'0080.4522.ad08', 'timestamp':'2013/05/02 19:05:00', 'type':'automatic'}]

def add_con(con):
    if any((con['IP'] == c['IP'] or con['MAC'] == c['MAC']) for c in con):
        # duplicate
    else:
        # new

您可以輕松地將此功能包裝到一個類中。


class ConnectionManager():

    def __init__(self):
        self.connections = []

    def add_con(ip, mac, timestamp, mode):
        if any((ip == c['IP'] or mac == c['MAC']) for c in self.connections):
            # duplicate
            return False # possible option?
        else:
            self.connections.append({'IP':ip, 'MAC':mac, 'timestamp':timestamp, 'mode':mode})
            return True # possible option?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM