声明不能按预期工作

时间:2013-08-09 01:11:16

标签: python for-loop

所以代码的目的是在每次满足if语句的要求时增加count的值,最后它给出了一个特定项在列表中出现的次数,这里是代码< / p>

x = ["fizz", "fizz", "fizz"]

def fizz_count(x):
    count = 0
    for fizz in x:
        return count+1

现在我只会给我一个,因为我知道for循环在第一个“fizz”停止了 我该怎么做?(我试过打印它给我三个一个,现在这是一个开始的原因如果我能告诉python检查有多少我会得到字符串“fizz”的频率出现了:))

感谢任何看过这个的人

3 个答案:

答案 0 :(得分:1)

您在第一次迭代时从for循环返回,这就是您获得count = 1的原因。您应该在循环中递增count,并在函数末尾返回它。


但是,你的for循环并没有按你想要的那样做。它不会在列表中搜索fizz。循环变量fizz将从列表中按顺序获取每个元素,而不仅仅是值为fizz的元素。

如果要计算fizz的总数,则需要添加if条件来测试值。或者您只需使用generator expressionsum()函数:

def fizz_count(x):
    return sum(1 for item in x if item == "fizz")

或者,甚至更简单,使用list.count(item)方法:

def fizz_count(x):
    return x.count("fizz")

答案 1 :(得分:0)

这里的问题是return语句将退出该函数,因此您只会循环一次,并始终返回count + 1,即0 + 1 = 1

您可以通过不返回count+1来修复此问题,而是返回总数:

def fizz_count(x):
    count = 0
    for fizz in x:
        count = count+1
    return count

要获取所显示的特定项目的次数,您可以使用if声明:

def fizz_count(x, item):
    count = 0
    for fizz in x:
        if fizz == item:
            count = count+1
    return count

答案 2 :(得分:0)

你也可以用lambda:

来做
x = ["fizz", "fizz", "fizz"]
fizz_count = lambda s: sum(1 for match in x if match is s)
print fizz_count("fizz")
# Output: 3