(Python 2.7)在函数中使用列表作为参数?

时间:2013-05-16 15:44:33

标签: python list function parameters arguments

所以我正在尝试使用codecademy来学习Python但是我被卡住了。它要求我定义一个以列表作为参数的函数。这是我的代码:

# Write your function below!    
def fizz_count(*x):
    count = 0
    for x in fizz_count:
        if x == "fizz":
            count += 1
    return count

这可能是我做错了一些蠢事,但它一直告诉我要确保该函数只接受一个参数,“x”。 def fizz_count(x):不起作用。我该怎么办?

编辑:感谢大家的帮助,我看到我现在做错了什么。

6 个答案:

答案 0 :(得分:2)

这里有一些问题:

  1. 您正在尝试迭代fizz_count。但是fizz_count是你的功能。 x是你传入的参数。所以它应该是for x in x:(但参见#3)。
  2. 您正在接受*x的一个参数。 *导致x成为所有参数的元组。如果您只传递一个列表,则列表为x[0],列表中的项目为x[0][0]x[0][1],依此类推。更容易接受x
  3. 当您对其进行迭代时,您正在使用您的参数x作为列表中项目的占位符,这意味着在循环之后,x不再引用传递 - 在列表中,但到最后一项。这实际上适用于这种情况,因为之后您不会使用x,但为了清楚起见,使用不同的变量名称会更好。
  4. 您的某些变量名称可能更具描述性。
  5. 把这些放在一起我们得到这样的东西:

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

    我认为你已经花了很长时间才能学习不太快游泳的海豚。写这个的更好方法可能是:

    def fizz_count(sequence):
        return sum(item == "fizz" for item in sequence)
    

    但实际上list有一个count()方法,tuple也是如此,所以如果你确定你的参数是一个列表或元组(而不是其他类型的序列) ),你可以这样做:

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

    事实上,这很简单,你几乎不需要为它编写函数!

答案 1 :(得分:1)

当您将*x传递给某个函数时,x就是一个列表。做任何一件事

def function(x):
   # x is a variable
   ...
function('foo') # pass a single variable
funciton(['foo', 'bar']) # pass a list, explicitly

def function(*args):
   # args is a list of unspecified size
   ...
function('foo') # x is list of 1 element
function('foo', 'bar') # x is list with two elements

答案 2 :(得分:1)

您的功能不是将列表作为参数。 *x扩展为使用传递的参数,因此期望像下面这样调用函数:

f(1, 2, 3)

不喜欢这样:

f([1, 2, 3])

请注意第一个示例中缺少列表对象。摆脱*,因为你不需要它:

# Write your function below!    
def fizz_count(lst):
    count = 0

    for elem in lst:
        if elem == "fizz":
            count += 1

    return count

您也可以使用list.count

# Write your function below!    
def fizz_count(lst):
    return lst.count('fizz')

答案 3 :(得分:0)

试试这个:

# Write your function below!    
def fizz_count(x):
    count = 0
    for i in x:
        if i == "fizz":
            count += 1
    return count

示例:

>>> fizz_count(['test','fizz','buzz'])
1

for i in x:将遍历列表x的每个元素。建议您阅读更多here

答案 4 :(得分:0)

一定是拼写错误。您正试图迭代函数名称。

答案 5 :(得分:0)

试试这个:

def fizz_count(x):
    counter = 0
    for element in x:
        if element == "fizz":
            counter += 1
    return counter