我试图弄清楚如何更改此代码。我希望能够返回列表中大于目标值的值的数量,而不是计算目标值出现的次数。
def countTarget2(myList, target):
counter = 0
for element in myList:
if element == target:
counter = counter + 1
return counter
5号线也要改吗?
counter > counter + 1
我试图弄清楚如何更改此代码。我希望能够返回列表中大于目标值的值的数量,而不是计算目标值出现的次数。
def countTarget2(myList, target):
counter = 0
for element in myList:
if element == target:
counter = counter + 1
return counter
5号线也要改吗?
counter > counter + 1
变化是相当微不足道的:
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)
您可以使用列表理解方法:
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)
所以,是的,有一个中间列表——生成器表达式是一个更好的选择。
不,你只会改变line 4
def countTarget2(myList, target):
counter = 0
for element in myList:
if element > target:
counter = counter + 1
return counter
请注意,该if
语句需要缩进line 5
您将第 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
。
不,在这种情况下,您将等价测试更改为大于测试。
您当前正在测试element == target
将counter = 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