在无序列表中查找倍数的最快方法

时间:2016-10-31 20:03:55

标签: python list

挑战的一部分要求我在无序列表中找到一个数字的倍数。例如:

鉴于 3 [6,7,8,2,12,6] :我想 [6,12,6] 因为6和12是3的倍数。列表和整数显然会明显更大,重复和有序。

我原本是用列表理解来做这件事,在那里我会检查每个元素是否是一个倍数:

x = 3 
list = [6,7,8,2,12,6]

multiples = [y for y in list if y % x == 0]

但是挑战的执行时间限制并不是这样的,我的假设是模数操作在迭代大型列表时需要一段时间。

我的下一个想法更快(或者我认为)是两个列表的交集:

  1. 给定(无序)列表
  2. x 之间 x 的所有倍数和无序列表中的最大值(1。)
  3. 直觉告诉我:

    x = 3 
    list = [6,7,8,2,12,6]
    
    multiples = set(xrange(x,max(list),x)).intersection(list)
    

    intersection()似乎没有保留重复项。

    有没有办法提高第一个的速度,或保留第二个的重复?或者是否有一些三级方式可以做得更好?感谢。

0 个答案:

没有答案