人の名前、年齢、IDをそれぞれ含むリストがあります。リスト内の特定のIDの出現回数をカウントしたいと思います。
私が試してみると:
alist=[(('john', 37), 8),(('john', 37), 8)]
count_ID=alist.count(8)
print count_ID
私は受け取ります:
count_ID returns 0
この例では、リストにid = 8のアイテムが2つあるため、2が返されると思います。どうすればこれを修正できますか?
人の名前、年齢、IDをそれぞれ含むリストがあります。リスト内の特定のIDの出現回数をカウントしたいと思います。
私が試してみると:
alist=[(('john', 37), 8),(('john', 37), 8)]
count_ID=alist.count(8)
print count_ID
私は受け取ります:
count_ID returns 0
この例では、リストにid = 8のアイテムが2つあるため、2が返されると思います。どうすればこれを修正できますか?
代わりにこれを試してください:
alist = [ (('john', 37), 8), (('john', 37), 8) ]
sum(1 for x in alist if x[1] == 8)
フィールドがタプルの 2 番目の要素として存在することを何らかの方法で指定する必要がありますid
。次に、それらのタプルのみを除外しid == 8
、最後に見つかったタプルごとに 1 を合計します。代わりに、結果のリストの長さを見つけることもできますが、なぜジェネレーターで十分な場合に一時的なリストを作成しますか?
コメントで指摘されているように、これも機能します。
sum(x[1] == 8 for x in alist)
上記のスニペットは、比較x[1] == 8
で aTrue
値が に評価され1
、 a が にFalse
評価されるため機能し0
ます。
alist.count(8)
8
の要素である場合にのみ機能しますalist
:
>>> alist = [(('john', 37), 8),(('john', 37), 8)]
>>> 8 in alist
False
8
ただし、リストの最初の要素の要素です。
>>> 8 in alist[0]
True
8
したがって、出現回数をカウントするには、 の各要素に が含まれているかどうかを確認する必要がありalist
ます。
>>> sum(i[1] == 8 for i in alist)
2
リストはフラットでなければなりません。Python はネストされたリストをカウントしません。したがって、次のようになります。
alist=[(('john', 37), 8),(('john', 37), 8),8,8]
Python が 2 を返すようにするには
リストを平坦化する方法は次のとおりです