4

こんにちは、値のリストがあります。そのリスト内のすべての値が発生する回数を含む別のリストを取得したいと考えています。これはかなり簡単ですが、元のリストに存在しない値を頻度リストに存在させる必要がありますが、値は 0 です。例:

I = [0,1,1,2,2,2,4,4,5,5,6,6,6,8,8,8]

あなたが期待するもの:

freqI = [1,2,3,2,2,2,3,3]

必要なもの:

freqI = [1,2,3,0,2,2,3,0,3]

ご覧のとおり、3 と 7 はIには含まれていませんが、頻度リストにはまだ含まれています。

私の最初の試みは、私に最初の種類の解決策を与えてくれました(中間値を使用):

d = {x:I.count(x) for x in I}

sorted_x = sorted(d.iteritems(), key=operator.itemgetter(0))

中間値が存在する配列の頻度カウント (別名ヒストグラム) を取得するにはどうすればよいですか?

4

5 に答える 5

8
>>> lis = [0,1,1,2,2,2,4,4,5,5,6,6,6,8,8,8]
>>> maxx,minn = max(lis),min(lis)
>>> from collections import Counter
>>> c = Counter(lis)
>>> [c[i] for i in xrange(minn,maxx+1)]
[1, 2, 3, 0, 2, 2, 3, 0, 3]

または@DSMで提案されているようにmin、それ自体maxから取得できますdict

>>> [c[i] for i in xrange( min(c) , max(c)+1)]
[1, 2, 3, 0, 2, 2, 3, 0, 3]
于 2013-05-27T19:37:54.553 に答える
5

どうですか

>>> I = [0,1,1,2,2,2,4,4,5,5,6,6,6,8,8,8]
>>> from collections import Counter
>>> frequencies = Counter(I)
>>> frequencies
Counter({2: 3, 6: 3, 8: 3, 1: 2, 4: 2, 5: 2, 0: 1})

任意の数のカウンターを照会できます。見たことのない数字の場合、0 を返します

>>> frequencies[42]
0
于 2013-05-27T19:37:46.880 に答える
2
[I.count(k) for k in range(max(I+1))]
于 2013-05-27T19:36:32.940 に答える
2

あなたのリストはソートされているように見えます。そうであれば、これが最善の方法です:

>>> from collections import Counter
>>> I = [0,1,1,2,2,2,4,4,5,5,6,6,6,8,8,8]
>>> c = Counter(I)
>>> [c[i] for i in range(I[0], I[-1]+1)]
[1, 2, 3, 0, 2, 2, 3, 0, 3]
于 2013-05-27T20:05:47.673 に答える
1

あなたは近くにいます。実際のリストの代わりにジェネレーターを反復処理したいだけです。このようなもの:

# note: lowercase variable names are Python standard and good coding practice!
d = {n:list_of_ints.count(n) for n in range(max(list_of_ints))} 

max(I)上限を指定しなかったため、リスト内の最大の要素であるを使用していることに注意してください。明らかに、代わりにこの数値をハードコードすることもできます。または、ヒストグラムを のデータ範囲に制限したい場合はI、それを にすることができますrange(min(I), max(I))

于 2013-05-27T19:37:34.443 に答える