检查元素是否已经在列表中?

2024-06-28 11:42:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份清单如下:

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,它不会将它添加到列表中,因为该元素已经存在于某个地方。 因此,我可能会再次尝试添加此列表,但我希望它失败:

^{pr2}$

我一直在做的方法是在列表中循环,并在找到元素后设置一个布尔值,但我觉得这种方法不太好。你会怎么做?我知道IP永远是每个列表的元素之一,但依赖索引似乎也是一种不好的方法。在


Tags: 方法ip元素列表mac地址地方automatic
3条回答

您可以使用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

解决这个问题的一个好方法是使用对象,并使列表成为对象的列表,而不是列表/元组的列表。然后可以重写对象的compare函数并使用普通的“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

然后你可以做一些类似的事情

^{pr2}$

如果IP地址是数据的关键列,则应使用字典将IP地址与其他列一起映射到元组(或列表)。在

相关问题 更多 >