我正在嘗試計算1000個組中的整數數據點數。計數/分組數據點:for循環或列表理解?
假設我們有範圍0..999999 10,000個數據點:
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)]
現在它的變體將是「更好」的方式來生成一個列表包含每個1000的內計數的數據點組?
「更好」 可以指下列之一(請詳細說明):
- 更好的性能
- 更Python 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:
# 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
謝謝你幫我在Python更好做的東西! :-)
非常感謝'collections'和'Counter'提示。我想這是一個值得檢查的模塊。我想我會按照你的建議路線使用'Counter'並讓它返回元組/值對。感謝您的時間和偉大的解釋!接受的答案:-) – Moonbase