我是python的初学者并且遇到了这个函数的问题。我正在尝试计算列表xs
中大于v
的值以及重复值。我在第3行收到错误:
NameError:名称'j'未定义
我下面的代码:
def count_greater(xs,v):
count_list = 0
for i in (xs) and j in (v):
if i > j:
count_list += 1
else:
count_list += 0
return count_list
count_greater([12,0,20,34,0,20],3)
我该如何处理?我不确定如何完成剩下的逻辑。
答案 0 :(得分:1)
v不是列表,而是单个数字,因此您无需迭代它。
所以这就足够了:
for i in (xs):
if i > v:
count_list += 1
您可以采取其他方法。例如,使用filter(function,list),如下所示:
list_greater = filter(lambda d: d < v, xs)
count_greater = len(list_greater)
这种方法的优点是你可以使用过滤后的数字,而不仅仅是计算它们。
答案 1 :(得分:0)
我认为这就是你所追求的目标:
def count_greater(xs,v):
count = 0
for i in xs:
if i >= v:
count += 1
return count
count_greater([12,0,20,34,0,20],3)
它返回列表中的值等于或大于第二个参数(示例中为3)的次数。在这种情况下返回的值是4.
答案 2 :(得分:0)
您的for
循环在语法上是不正确的。您需要迭代刚刚xs
列表并检查v
的值。例如在v
中获取大于等于xs
的数字:
def count_get_greater_item(xs,v):
greater_than_v = []
for item in xs:
if item >= v:
greater_than_v.append(item)
return greater_than_v
count_above([22,0,30,44,0,30],5)
但是,为了找到重复项(我的理解是列表中多次出现的数字),您可以使用collections.Counter()
作为:
import collections
duplicate_list = []
for item, count in collections.Counter(x).items():
if count > v:
duplicate_list.append(item)
或者,通过 list comprehension 在一行中输入:
duplicate_list = [item for item, count in collections.Counter(xs).items() if count > v]
其中xs
和v
保持与问题
答案 3 :(得分:0)
使用该语言的内置功能:
def count_greater(xs,v):
return sum([item >= v for item in xs])
print (count_greater([12,0,20,34,0,20],3))
输出 4 ,正如所料。
在您的代码中,请注意count += 0
绝对没有任何内容;删除它和其他。如您所知,只需使用 v ;没有必要在一个你知道只有一个项目的构造上迭代 j 。
答案 4 :(得分:0)
据我所知,工作代码是计算列表中的值而不是v
def count_above(xs,v):
count_list = 0
for i in xs: # for each i in the list which is xs
if i > v:
count_list += 1
else: # take care of else space should be under if dircitly
count_list += 0
return count_list
count_above([22,0,30,44,0,30],5)
你应该照顾好你的空间,然后按照我在上面的代码中提到的那样循环列表中的每一个
答案 5 :(得分:0)
您可以使用列表推导来获取条件事件计数和集合以识别重复的(总)数量:
vals = [22,0,30,44,0,30]
ceil = 5
over_ceil_count = len([v for v in vals if v > ceil])
dup_count = len(vals) - len(set(vals))
该集合会自动删除重复项,因此集合长度与原始列表长度之间的差异会告诉您开始使用的重复值的数量。