我正在尝试编写一个输入数字为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的新手。请让我知道如何继续这样做。
答案 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
list
个L = [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
的第一个数字。
接下来,我们需要3
和5
的倍数:
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)