根据列表长度和索引检查实例属性

Checking instances attributes based on list length and indexing

我正在寻找一种 pythonic 方式来编写下面相同但行数更少的代码:

mylist = [Instance1(), Instance2(), Instance3()]

if mylist[0].skill == 'java' and mylist[0].is_eligible:
    [...]
elif mylist[1].skill == 'java' and mylist[1].is_eligible:
    [...]
elif mylist[2].skill == 'java' and mylist[2].is_eligible:
    [...]

所以注意这里我使用的是elif语句,上面伪代码中的条件不应该同时出现,而应该只执行其中一个。

如果不是这种情况,我会循环访问列表中的每个实例并轻松检查条件。

请记住,条件的数量等于列表的长度,因此不必总是等于 3。

注意:

我需要检查第一项的条件,如果它是 False,我将检查列表的第二项,如果它是 True,我将停止执行代码块,依此类推..

找到匹配项后,您可以使用 break

for item in mylist:
  if item.skill == 'java' and item.is_eligible:
    print(item)
    break
else:
  print('No match')

我认为这符合您的要求:

class Instance1: skill = 'java'; is_eligible = False
class Instance2: skill = 'java'; is_eligible = True
class Instance3: skill = 'python'; is_eligible = True


mylist = [Instance1(), Instance2(), Instance3()]

for i, instance in enumerate(mylist):
    if instance.skill == 'java' and instance.is_eligible:
        print(f'mylist[{i}] matched')
        break
else:
    print('none matched')