我正在尝试计算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