「fizz」という単語がリストに表示される回数を数えようとしています。これはコードです:
def fizz_count(key):
for x in key:
if x != 'fizz':
key.remove(x)
return len(key)
print fizz_count(["fizz",0,0,0,10])
ただし、これは 1 ではなく 4 を返します。コードに関するヘルプはありますか?
関数が何かを返すとすぐに壊れます。したがって、 を実行return len(key)
すると、最初の を削除した後にリストの長さが返されます0
。
リストに何かが表示される回数を数えたい場合は、次のようにしますkey.count('fizz')
反復処理中にリストからアイテムを削除しないでください。"fizz"
ループを続けてさらにesがあるとどうなるか見てみましょう:
>>> key = ['fizz', 1, 2, 3, 'fizz', 4]
>>> for x in key:
... if x != 'fizz':
... key.remove(x)
... print key # Print the list after an item is removed.
...
['fizz', 2, 3, 'fizz', 4]
['fizz', 2, 'fizz', 4]
['fizz', 2, 'fizz']
2
?を決して削除しなかったことに注意してください。リストの長さ/順序が変更されたため、forループがそれに追いつかなかったからです。
まず、標準ライブラリの count メソッドを使用して同じことを行う必要があります。
["fizz",0,0,0,10].count("fizz")
1 を返す必要があります。ただし、独自のロジックを使用する場合は、更新されたものを次に示します。
def fizz_count(key):
for x in key:
if x != 'fizz':
key.remove(x)
return len(key)
print fizz_count(["fizz",0,0,0,10])
if ブロック内の return ステートメントにより、関数は "fizz" に一致しない最初の要素を見つけるとすぐに戻ります。したがって、5 つの要素のリストがあるため、出力として常に 4 つが得られます。
インデントによって が条件の一部になるため、4
代わりに返されます。1
return
if