3和5的倍数

时间:2015-05-30 18:22:00

标签: python list

我正在尝试编写一个输入数字为T(测试用例数)的程序,然后询问数字N.

这是我的代码:

T = int(raw_input())
L = [int(raw_input()) for i in range(T)]
L1 = []
for i in range(0,L[i]):
    if (i%3 == 0 or i%5 ==0):
        L1.append(i)
print L1
  

输入:2 10 20

     

输出:[0, 3, 5, 6, 9, 10, 12, 15, 18]

我希望输出格式如下:

  

[[0, 3, 5, 6, 9], [0, 3, 5, 6, 9, 10, 12, 15, 18]]

这里[0,3,5,6,9]是包含数字10的倍数为3和5的元素的列表

[0, 3, 5, 6, 9, 10, 12, 15, 18]是包含数字20的倍数为3和5的元素的列表

我是python的新手。请让我知道如何继续这样做。

4 个答案:

答案 0 :(得分:2)

我认为您想要的是按输入值拆分列表。希望它有所帮助

num = int(raw_input())
upperBounds= [int(raw_input()) for i in range(num)]
res= []
for upperBound in upperBounds:
    res.append([i for i in range(0,upperBound) if not (i % 3 and i % 5)])

output:

2
10
20
[[0, 3, 5, 6, 9], [0, 3, 5, 6, 9, 10, 12, 15, 18]]

答案 1 :(得分:2)

以下内容将生成一个list listL = [10,20] L1 = [] for i in L: L2 = [] # initialize a new list for j in range(i): if not (j%3 and j%5): # use falsy values and DeMorgan's Law L2.append(j) # append to this list if L2: # use this if you don't want to keep empty lists L1.append(L2) ,其中包含3和5的所有小于给定数字的倍数。

>>> L1
[[0, 3, 5, 6, 9], [0, 3, 5, 6, 9, 10, 12, 15, 18]]
action

答案 2 :(得分:0)

这可以通过应用适当的逻辑轻松完成:

  

如果索引0处的元素必须从0迭代到该元素

     

否则我们必须将形式L [index-1]迭代到L [index]

T = int(raw_input())
L = [int(raw_input()) for i in range(T)]
L1 = []
for j in xrange(len(L)):
   temp = []
   get = 0 if not j else L[j-1]
   # if j==0:
   #    get = 0
   # else:
   #    get = L[j-1]
   for i in range(get, L[j]):
      if (i%3 == 0 or i%5 ==0):
         temp.append(i)
   L1.append(temp)
print L1

>>> [[0, 3, 5, 6, 9], [10, 12, 15, 18]]

或者更多Pythonic和压缩版本可能如下所示:

T = int(raw_input())
L = [int(raw_input()) for i in range(T)]
L1 = []
for j in xrange(len(L)):
   get = 0 if not j else L[j-1]
   L1.append([i for i in range(get, L[j]) if (i%3 == 0 or i%5 ==0)])
print L1 

答案 3 :(得分:0)

您只需生成range(l,u,s)的倍数列表,其下限为l,上限为u,步骤为d

现在,如果我们想为给定范围生成i的倍数,我们可以使用以下函数:

def multiples(factor, lower, upper) :
    return set(range(lower+(factor-lower)%factor,upper,factor))

我们因此将下限操纵为lower+(factor-lower)%factor,以便在恒定时间内搜索大于或等于lower的第一个数字。

接下来,我们需要35的倍数:

def multiples35(lower, upper):
    return sorted(list(multiples(3,lower,upper)|multiples(5,lower,upper)))

现在我们只需迭代值列表并为每两个数字生成多个列表:

def func(B):
    return [multiples35(0,upper) for upper in B]

或完整代码:

import sets

def multiples(factor, lower, upper) :
    return set(range(lower+(factor-lower)%factor,upper,factor))

def multiples35(lower, upper):
    return sorted(list(multiples(3,lower,upper)|multiples(5,lower,upper)))

def func(B):
    return [multiples35(0,upper) for upper in B]

主要功能是:

T = int(raw_input())
B = [int(raw_input()) for i in range(T)]
print func(B)