挑战的一部分要求我在无序列表中找到一个数字的倍数。例如:
鉴于 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]
但是挑战的执行时间限制并不是这样的,我的假设是模数操作在迭代大型列表时需要一段时间。
我的下一个想法更快(或者我认为)是两个列表的交集:
x = 3
list = [6,7,8,2,12,6]
multiples = set(xrange(x,max(list),x)).intersection(list)
但intersection()
似乎没有保留重复项。
有没有办法提高第一个的速度,或保留第二个的重复?或者是否有一些三级方式可以做得更好?感谢。