Python 使用给定的属性值计算列表中的元素

Python 使用给定的属性值计算列表中的元素,python,Python,我正在使用Python 2.7。我有一个对象列表,每个对象都包含一个名为vote的属性,该属性的值可以是yes或no,我想计算赞成票和反对票的数量。一种方法是: list = [ {vote:'yes'}, {vote:'no'}, {vote:'yes'} ] #... numYesVotes = len([x for x in list if x.vote=='yes']) numNoVotes = len([x for x in list if x.vote=='no']) 但对我来说,

我正在使用Python 2.7。我有一个对象列表,每个对象都包含一个名为vote的属性,该属性的值可以是yes或no,我想计算赞成票和反对票的数量。一种方法是:

list = [ {vote:'yes'}, {vote:'no'}, {vote:'yes'} ] #...
numYesVotes = len([x for x in list if x.vote=='yes'])
numNoVotes = len([x for x in list if x.vote=='no'])
但对我来说,建立这些列表只是为了得到它们的长度和效率,这似乎是非常浪费/低效的

第一个问题:我说的对吗?简单地在列表中循环一次并增加计数器变量不是更有效一点吗?i、 e:

numYesVotes = numNoVotes = 0;
for x in list: 
    if x.vote == 'yes': 
        numYesVotes++
    else:
        numNoVotes++
或者是关于列表理解的一些东西可以让它们在这里更有效

第二个问题:我正在学习使用lambdas,我觉得这是一个完美的使用案例——但我不太明白如何在这里使用lambdas,我该怎么做

编辑:

例如:

yn = Counter("yes" if x%2 else "no" for x in range(10))
print(yn["yes"],yn["no"])

编辑:

例如:

yn = Counter("yes" if x%2 else "no" for x in range(10))
print(yn["yes"],yn["no"])

lambda
表单

t =lambda lst: len([ v for x in lst for k,v in x.items() if v=='yes'])
#print (t(mylst))
mylst
是要检查其中有多少是或否的列表。使用键dict方法

演示


lambda
表单

t =lambda lst: len([ v for x in lst for k,v in x.items() if v=='yes'])
#print (t(mylst))
mylst
是要检查其中有多少是或否的列表。使用键dict方法

演示


请注意,这样做更快:

sum(1 for x in L if x.vote=='yes')
比:


因为不必创建列表。

请注意,这样做更快:

sum(1 for x in L if x.vote=='yes')
比:


因为不需要创建列表。

您应该避免命名变量
列表
您应该避免命名变量
列表
您还应该包括如何从中获取计数您还应该包括如何从中获取计数