(Python2.7)在函数中使用列表作为参数?

2024-05-15 17:37:16 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试着用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):也不起作用。我在这里该怎么办?

编辑:谢谢大家的帮助,我明白我现在做错了什么。


Tags: 函数密码列表foryour参数定义def
3条回答

您的函数不将列表作为参数。*x展开以使用传递的参数,因此您的函数应按如下方式调用:

f(1, 2, 3)

不是这样的:

f([1, 2, 3])

注意第一个例子中缺少list对象。去掉*,因为您不需要它:

# 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')

这里有几个问题:

  1. 您正在尝试遍历fizz_count。但是fizz_count是你的函数。x是传入参数。所以应该是for x in x:(但是请看#3)。
  2. 你用*x接受一个参数。*使x成为all参数的元组。如果只传递一个列表,那么列表是x[0],列表的项是x[0][0]x[0][1]等等。更容易接受x
  3. 循环遍历列表时,使用参数x作为列表项的占位符,这意味着循环之后,x不再引用传入列表,而是引用它的最后一个项。在这种情况下,这实际上是可行的,因为之后不使用x,但是为了清楚起见,最好使用不同的变量名。
  4. 一些变量名可能更具描述性。

把这些放在一起我们会得到这样的结果:

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")

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

当您将*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

相关问题 更多 >