私は1000のグループ内の整数データポイントの数を数えようとしています。データポイントのカウント/グループ化:for-loopまたはlist comprehension?
我々は範囲0..999999 10,000データ・ポイントを持っていると仮定しましょう:バリアントはそれぞれ1000の範囲内のデータポイントのカウント数を含むリストを生成するために、「より良い」の方法でしょう
import random
random.seed(123456) # generate a reproducable sequence
# make 10000 numbers in range 0..99999
maxn = 99999
numbers = [random.randint(0,maxn) for i in range(10000)]
今グループ?
"ベター"(詳しく説明してください)次のいずれかを意味することができます:6ヶ月後
- 良いパフォーマンス...
バリアント1:
# generate a zero-initialized "array" to hold the counts per 1000's block
blocks1 = [0 for i in range(maxn/1000 +1)] # init 1D "array"
for num in numbers:
blocks1[num/1000] += 1 # int divide by 1000 gives index
print blocks1[1] # show how many in range 1000..1999
バリアント2:Pythonでより良いものをやって私を助けるため
# Use a really wild list comprehension:
blocks2 = [len(filter(lambda num: num/1000 == i, numbers))
for i in range(maxn/1000+1)]
print blocks2[1] # show how many in range 1000..1999
ありがとう! :-)
'collections'と' Counter'のヒントに感謝します。私はこれがチェックアウトする価値のあるモジュールだと思います。私は、あなたの提案されたルートを 'Counter'を使って追跡し、タプルと値のペアを返すようにします。あなたの時間と大きな説明に感謝します!回答が受け入れられました:-) – Moonbase