如何从类实例列表中获取属性值列表

时间:2014-07-25 19:59:44

标签: python list class

class Enemy:
    def __init__(self,name,health):
        self.name=name
        self.health=health

wolf=Enemy('wolf',100)
imp=Enemy('imp',70)
orc=Enemy('orc',130)
enemyList=[wolf,imp,orc]

while 1:
    enemyNumber=int(input("How many enemies are there? "))
    if enemyNumber in range(1,4):
        break
    else:
        print('Wrong number')

if enemyNumber<=2:
    del enemyList[2]
    if enemyNumber==1:
        del enemyList[1]

基本上我现在想要的是能够说出这样的话:

attackTarget=None
while not attackTarget in enemyList:
        attackTarget=input('Which enemy do you want to attack? ')
        if not attackTarget in enemyList:
            wrongChoice()

问题在于我没有敌人名单的列表,而是实例本身。我知道我可以通过以下方式获得它:

enemyNameList=[]
for i in range (enemyNumber):
    enemyNameList.append(enemyList[i].name)

但是,是否有一种更简单的方法可以在while和if语句中使用而无需创建一个全新的永久列表?像enemyList.name

之类的东西

1 个答案:

答案 0 :(得分:2)

您可以使用列表理解:

enemeyNameList = [enemy.name for enemy in List]

这仍然会创建一个全新的列表,但更加清晰。

如果您尝试在不创建新列表的情况下执行此操作,则可能会遇到不同类型的低效问题。由于您在while循环中重复测试,因此存储名称列表是有意义的。否则,你必须在每次通过循环时反复查找每个敌人的名字。