1

人の名前、年齢、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が返されると思います。どうすればこれを修正できますか?

4

3 に答える 3

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ます。

于 2012-10-24T23:23:43.457 に答える
2

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
于 2012-10-24T23:26:25.833 に答える
2

リストはフラットでなければなりません。Python はネストされたリストをカウントしません。したがって、次のようになります。

alist=[(('john', 37), 8),(('john', 37), 8),8,8]

Python が 2 を返すようにするには

リストを平坦化する方法は次のとおりです

于 2012-10-24T23:27:03.533 に答える