0

我试图弄清楚如何更改此代码。我希望能够返回列表中大于目标值的值的数量,而不是计算目标值出现的次数。

def countTarget2(myList, target):
    counter = 0
    for element in myList:
        if element == target:
            counter = counter + 1
    return counter

5号线也要改吗?

counter > counter + 1
4

5 回答 5

4

变化是相当微不足道的:

if element > target:  # if the element is greater than the target

不要忘记正确缩进后面的行。

请注意,编写此函数的最Pythonic方式是使用sum()

def countTarget2(myList, target):
    return sum(1 for element in myList if element > target)
于 2013-09-10T23:14:49.003 回答
2

您可以使用列表理解方法:

def countTarget2(myList, target):
    return len([element for element in myList if element > target])

print countTarget2([1,2,3,4], 2)  # prints 2

升级版:

这实际上是一个简短的形式:

def countTarget2(myList, target):
    l = []
    for element in myList:
        if element > target:
             l.append(element)
    return len(l)

所以,是的,有一个中间列表——生成器表达式是一个更好的选择。

于 2013-09-10T23:14:03.693 回答
2

不,你只会改变line 4

def countTarget2(myList, target):
    counter = 0
    for element in myList:
        if element > target:
            counter = counter + 1
    return counter

请注意,该if语句需要缩进line 5

于 2013-09-10T23:14:37.383 回答
2

您将第 4 行更改为if element > target:

def countTarget2(myList, target):
    counter = 0
    for element in myList:
        if element > target:
            counter += 1
    return counter

或者,您使用更实用的功能(但对于初学者来说可能很难理解):

def countTarget2(myList, target):
    return len(x for x in myList if x < target)

PS我也改成counter = counter + 1了好看的counter += 1

于 2013-09-10T23:14:55.697 回答
1

不,在这种情况下,您将等价测试更改为大于测试。

您当前正在测试element == targetcounter = counter+1在每个等效项上执行(正确缩进)行。

要进行大于测试,您需要将测试更改为element > target.

代码如下所示:

def countTarget2(myList, target):
    counter = 0
    for element in myList:
        if element == target:
            counter = counter + 1 # properly indented, dont forget this!
    return counter
于 2013-09-10T23:15:35.013 回答