1

リストと項目 (string、int、float のいずれか) の 2 つの入力を受け取り、項目がリストに表示される回数を返す関数を定義しようとしています。これが私のコードです:

def count(sequence,item):
    for all x in sequence:
        if x != item:
            while x in sequence:
                sequence.remove(x)
    return len(sequence)

ただし、これはシーケンス内のアイテムと等しくない最初の要素のみを削除し、それを削除します。たとえば、count([4,8,3],3) は、リストから 4 だけを削除するため、2 を返します。forループがそれを処理するはずだと思いました。

助言がありますか?

4

2 に答える 2

3

countメソッドを使用すると、これと同じくらい簡単です。

the_list.count(the_item)

ドキュメントから:

list.count(x)x がリストに出現する回数を返します。

例えば:

[1, 2, 3, 1, 4].count(1)
=> 2

ところで、わかりません。単純にカウントするはずの関数で要素を削除するのはなぜですか?

于 2013-03-19T23:59:08.130 に答える
0

リストを反復してこのリストの長さを変更すると危険です (remove() を使用します)。

あなたの場合、リスト「シーケンス」を反復しているとき、最初にシーケンス[0](つまり4)を取得します。そして、あなたはそれを取り除きます。次に、シーケンス[1]を取得します。sequence[1] は 8 だとします。ただし、前に 4 を削除したため、現在、sequence[0] は 8 で、sequence[1] は 3 です。したがって、得られるのは 8 ではなく 3 です。これが、削除できない理由です。シーケンスから 8。あなたはそれを無視します。

于 2013-03-20T05:16:41.547 に答える