通话清单未在 python 中一直搜索

call list not searching all the way through in python

我有这个代码:

class Junior_devs:
    entry_list = []
    raise_amount = 1.04
    sum = 0
    def __init__(self, first, last, pay, email):
        self.first = first
        self.last = last
        self.pay = pay
        self.email = email
    def apply_raise(self):
        if self in Junior_devs.entry_list:
           self.pay = (int(self.pay) * Junior_devs.raise_amount)
        else:
            self.pay = (int(self.pay) * Senior_devs.raise_amount)
    @classmethod
    def add_employee(cls, string):
        first, last, pay, email = string.split(" ")
        emp = cls(first, last, int(pay), email)
        cls.entry_list.append(emp)
        return emp
    @classmethod
    def sumOfpay(cls):
        sum = 0
        for x in cls.entry_list:
            dicti = x.__dict__
            sum += int(dicti["pay"])
        return sum
    def change_level(self):
        if self in Junior_devs.entry_list:
            Junior_devs.entry_list.remove(self)
            Senior_devs.entry_list.append(self)
        elif self in Senior_devs.entry_list:
            Senior_devs.entry_list.remove(self)
            Junior_devs.entry_list.append(self)
class Senior_devs(Junior_devs):
    entry_list = []
    raise_amount = 1.10


emp1 = Junior_devs.add_employee("imri peretz 20000 imrip27@gmail.com")
emp3 = Junior_devs.add_employee("tray belfort 10000 trey.belfort@gmail.com")
emp2 = Senior_devs.add_employee("Test User 1000 test.user@gmail.com")
emp4 = Senior_devs.add_employee("jordan belfort 2000 jordan.belfort@gmail.com")


print("Juniors: ")
for x in Junior_devs.entry_list:
    print(x.__dict__)
print("Seniors: ")
for x in Senior_devs.entry_list:
    print(x.__dict__)
print("---------------")
for x in Junior_devs.entry_list:
    Junior_devs.change_level(x)
print("Juniors: ")
for x in Junior_devs.entry_list:
    print(x.__dict__)
print("Seniors: ")
for x in Senior_devs.entry_list:
    print(x.__dict__)

当我使用 change_level 函数将一个实例从初级切换到高级时,它们都会切换,但总是有 1 个实例进行切换。 使用功能之前:

Juniors: 
{'first': 'imri', 'last': 'peretz', 'pay': 20000, 'email': 'imrip27@gmail.com'}
{'first': 'tray', 'last': 'belfort', 'pay': 10000, 'email': 'trey.belfort@gmail.com'}
Seniors:
{'first': 'Test', 'last': 'User', 'pay': 1000, 'email': 'test.user@gmail.com'}
{'first': 'jordan', 'last': 'belfort', 'pay': 2000, 'email': 'jordan.belfort@gmail.com'}

使用后:

Juniors:
{'first': 'tray', 'last': 'belfort', 'pay': 10000, 'email': 'trey.belfort@gmail.com'}
Seniors:
{'first': 'Test', 'last': 'User', 'pay': 1000, 'email': 'test.user@gmail.com'}
{'first': 'jordan', 'last': 'belfort', 'pay': 2000, 'email': 'jordan.belfort@gmail.com'}
{'first': 'imri', 'last': 'peretz', 'pay': 20000, 'email': 'imrip27@gmail.com'}

Juniors 的最后一个实例也应该转移到 Seniors。 这就是我遇到的问题,因为我在 class 的条目列表中循环的方式应该在整个列表中循环,但我找不到为什么它在最后一个元素处停止的原因。希望得到一些帮助。

所有问题都使 remove() 您在迭代列表中 运行。

当您从列表中删除元素时,下一个元素将移动到它的位置,稍后 for-loop 会跳过该元素。如果您有更多元素,那么它会跳过所有“偶数”元素(第二、第四、第六、第八等)

您应该首先将所有元素附加到 Senior,然后从 Junion 中删除所有元素。

或者您应该处理此列表的副本

for x in Junior_devs.entry_list.copy():  # <-- work on copy of list
    Junior_devs.change_level(x)