0

「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 を返します。コードに関するヘルプはありますか?

4

4 に答える 4

6

関数が何かを返すとすぐに壊れます。したがって、 を実行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ループがそれに追いつかなかったからです。

于 2013-10-05T07:13:21.433 に答える
2

まず、標準ライブラリの 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 つが得られます。

于 2013-10-05T07:45:53.660 に答える
1

インデントによって が条件の一部になるため、4代わりに返されます。1returnif

于 2013-10-05T07:14:03.083 に答える