尽管Martijn
Pieters的答案是正确的,但当
samplesize变大时,它的确会减慢速度,因为
list.insert在循环中使用可能具有二次复杂度。
我认为,这是在提高性能的同时保持一致性的一种替代方法:
def iter_sample_fast(iterable, samplesize): results = [] iterator = iter(iterable) # Fill in the first samplesize elements: try: for _ in xrange(samplesize): results.append(iterator.next()) except StopIteration: raise ValueError("Sample larger than population.") random.shuffle(results) # Randomize their positions for i, v in enumerate(iterator, samplesize): r = random.randint(0, i) if r < samplesize: results[r] = v # at a decreasing rate, replace random items return results
samplesize上面的值开始逐渐显示出差异
10000。致电时间
(1000000, 100000):
- iter样本:5.05s
- iter_sample_fast:2.64秒
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)