Python 使用给定的属性值计算列表中的元素
我正在使用Python 2.7。我有一个对象列表,每个对象都包含一个名为vote的属性,该属性的值可以是yes或no,我想计算赞成票和反对票的数量。一种方法是: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']) 但对我来说,
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')
比:
因为不需要创建列表。您应该避免命名变量
列表
您应该避免命名变量列表
您还应该包括如何从中获取计数您还应该包括如何从中获取计数