Python,从列表中删除对象

Python,从列表中删除对象,python,Python,我还在学习Python,我有一个问题。如果我的问题不是那么清楚,请友好一点 在使用列表时,如果只有一个对象匹配,我是否可以从列表中删除一个对象 例如: driver.addDriver(Driver("Ben", "BBB")) driver.removeDriver("Ben", "123") 我是否可以删除驾驶员姓名并打印为无,同时仍显示车辆号码。谢谢 class Driver: def __init__(self, name, vehNo):

我还在学习Python,我有一个问题。如果我的问题不是那么清楚,请友好一点

在使用列表时,如果只有一个对象匹配,我是否可以从列表中删除一个对象

例如:

driver.addDriver(Driver("Ben", "BBB"))                 
driver.removeDriver("Ben", "123")
我是否可以删除驾驶员姓名并打印为无,同时仍显示车辆号码。谢谢

class Driver:
    def __init__(self, name, vehNo):
        self._name = name
        self._vehNo = vehNo

    @property
    def name(self):
        return self._name

    @property 
    def vehNo(self):
        return self._vehNo
    @vehNo.setter
    def vehNo(self, newVehNo):
        self._vehNo = newVehNo

    def __str__(self):
        return 'Driver Name: {} Vehicle Number: {}'.format(self._name, self._vehNo)


class TransportServices:
    def __init__(self):

    self._drivers   = []



    def searchDriver(self, name = None, vehNo = None):
        for d in self._drivers:
            if d.name == name and d.vehNo == vehNo:
                return d

        return None


#############################################################################

    def addDriver(self, driver):
        d = self.searchDriver(driver.name)
        if d is None:
            self._drivers.append(driver)
            return True
        else:
            return False

#############################################################################

    def removeDriver(self, name = None, vehNo = None):
        d = self.searchDriver(name, vehNo)
        if d is None:
            return False

        else:
            self._drivers.remove(d)



#############################################################################   

    def __str__(self):

        drivers = [str(d) for d in self._drivers]
        return "{} ".format('\n'.join(drivers))



def main():


    driver = TransportServices()
    driver.addDriver(Driver("Alan", "AAA"))
    driver.addDriver(Driver("Ben", "BBB"))
    driver.removeDriver("Ben", "123")



    print(driver)
main()

基本上,您要查找的不是删除对象,而是更新它

您可以更新相应的对象,如下所示:

for driver in self.drivers:
    if driver.name == 'Bob': # or  driver vehNo == 'BBB'
        driver.name = None
同样对于你的情况, 你可以用一本同样的字典 作为Java中的哈希映射

您可以执行以下操作:

self.drivers={}

self.driver['vehicle Num']=DRIVERObject


因此,当您需要访问或更新时,您可以立即执行此操作,即O(1),而无需遍历所有驱动程序。

您的代码乍一看似乎正常,您是否面临任何特定问题?我可以删除整个列表,但我不知道如何只删除司机姓名或车号。我不知道“删除司机姓名或车号”是什么意思。数组由包含这两种属性的对象组成。如果删除该对象,这两个属性显然也将消失。我的意思是,我是否可以删除驾驶员姓名,然后仍然能够打印出车辆号码,或者反之亦然。驾驶员姓名和车辆号码之间的关系是什么?现在你有一个(驾驶员、车辆)对的列表,但听起来你可能想要更复杂的东西;可能会尝试两种映射,一种是(驾驶员->车辆列表),另一种是(车辆->驾驶员列表)。我被告知要使用一个列表,尽管我同意使用dict会容易得多。