根据列表长度和索引检查实例属性
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')
我正在寻找一种 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')