57

条件に一致するリスト内のオブジェクトの数を簡単かつ迅速にカウントする方法を見つけようとしています。例えば

class Person:
    def __init__(self, Name, Age, Gender):
        self.Name = Name
        self.Age = Age
        self.Gender = Gender

# List of People
PeopleList = [Person("Joan", 15, "F"), 
              Person("Henry", 18, "M"), 
              Person("Marg", 21, "F")]

属性に基づいて引数に一致するこのリスト内のオブジェクトの数をカウントするための最も簡単な関数は何ですか? たとえば、Person.Gender == "F" または Person.Age < 20 の場合は 2 を返します。

4

5 に答える 5

8

リスト内包表記を使用してその長さを取得する方が、 を使用するよりも高速であることがわかりましたsum()

私のテストによると...

len([p for p in PeopleList if p.Gender == 'F'])

...1.59 倍の速さで実行...

sum(p.Gender == "F" for p in PeopleList)
于 2015-07-17T18:08:38.230 に答える
2

個人的には、関数の定義は複数の用途でより簡単だと思います:

def count(seq, pred):
    return sum(1 for v in seq if pred(v))

print(count(PeopleList, lambda p: p.Gender == "F"))
print(count(PeopleList, lambda p: p.Age < 20))

特にクエリを再利用したい場合。

于 2013-05-09T07:02:19.997 に答える