1

Python のビルトイン カウントの代替コードを記述できるようになりたいと考えています。このコードは動作します

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    mycount = seq.count(element)
    return mycount

しかし、私はそれを for ループ (または別の方法?) で書きたいと思います。

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    for i in seq:
        if  element == seq:
            print i

繰り返し発生する要素を整数として返す方法がわかりません。どんな助けでも大歓迎です!!

4

4 に答える 4

7

使用法sum()とジェネレータ式:

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    return sum(1 for i in seq if i == element)

これは何をしますか:それはの各アイテムをループしseq、そのアイテムがに等しい場合element、それは合計を生成し1sum()合計数を取得します。

このようなジェネレータ式を使用すると、一度に参照されるアイテムが1つだけになり、巨大なシーケンスを効率的seqにスキャンできるようになります。

于 2012-12-28T18:00:59.093 に答える
2

これはどう:

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    count = 0
    for i in seq:
        if  element == i:
            count += 1
    return count

これは何をしますか:それはの各アイテムをループしseq、そのアイテムがに等しい場合、それは(最初は)elementに追加1し、ループが終了した後に戻ります。count0count

このようにforループを使用すると、一度に参照されるアイテムが1つだけになり、巨大なシーケンスを効率的seqにスキャンできるようになります。

于 2012-12-28T18:02:52.390 に答える
2

ちょうど別の方法

from collections import Counter
def count(elem, seq):
    return Counter(seq)[elem]

そしてちょうど別の方法

>>> from itertools import compress
>>> len(list(compress(seq, [e == 1 for e in seq])))
3

少し変化があります

>>> sum(1 for _ in compress(seq, [e == 1 for e in seq]))
3

フィルタを使用した別の実装

>>> len(filter(None, [e == 1 for e in seq]))
3
于 2012-12-28T18:07:32.913 に答える
1

forあなたの例のように、それをループとして書きたい場合:

def count(element, sequence):
    c = 0
    for e in sequence:
        if e == element:
            c += 1
    return c
于 2012-12-28T18:03:01.170 に答える