我的代码获取一个数字列表,然后找出它的除数。现在,假设我有一个列表[12,15,20]。现在,当我浏览列表中的每个元素时,我的目标是将12、15和20的所有除数存储在单独的列表中,以便以后可以引用它们
例如
4的除数是1, 2, 4
12的除数是1, 2, 3, 4, 6, 12
所以,结果应该是[[1,2,4],[1,2,3,4,6,12]]
现在,在找到4的除数后,将它们追加到一个列表中。然后将该列表存储在名为M的新列表的第一个索引中,然后继续查找12的除数,将它们附加到一个列表中,并将该列表存储在列表M的第二个索引中
但是,我无法做到这一点,这是我的尝试,也是一个可视化工具,帮助理解代码http://goo.gl/InJxV3中发生了什么:
def fn(N):
result = []
G = []
if type(N) is list: #checks input for list type
for i in N: #for elements in input. e.g., 12,15,20
for j in range(1,i+1): #j is the numbers that we're going to divide i with
if(i%j == 0 and i >= j): #checks if remainder is 0, if it is, then j is a divisor/multiple of i
result.append(j) #appends j to list result
G.append([result]) # <----- NOT RIGHT.Attempting to create a new list to store result.
return print(G[:])
fn([4,12,15])
很乐意得到一些指导、帮助、建议。另外,我不希望使用zip()函数。在
result = []
return print(G[:])
您要么打印,要么返回。混合它们没有意义,因为print
不返回任何内容(None
)。在与其编写函数来查找整数列表中所有数字的因子,不如先编写一个函数来查找一个数的因子:
现在您可以找到单个数字的因子,可以使用^{} 将其应用于数字列表:
^{pr2}$或者,您可以使用列表理解:
这两种方法都返回以下值:
如果您愿意,您可以将其中任何一个设为函数:
如您所见,将最初的问题从求一组数的因子分解到求一个数的因子,可以使整个问题变得更简单,解决方案也更简单。在
编辑1
下面是我为什么根据OP的请求使用
n//x
而不是仅仅使用n/x
。//
是Python中的floor division运算符。它本质上相当于将两个数除以,然后调用商的^{n/x
将使用“真除法”,正如您所说,它返回一个浮点。因为我们在寻找整数因子,所以只有强制数字为整数才有意义。在如果您真的愿意,可以用您在问题中使用的算法替换我的
factor
函数,而不必更改程序的行为:或者,更短的等价物:
但是,我使用的算法更有效,因为它只需要检查直到被分解的数字的平方根。在
编辑2
我从其他一些答案中看出,你可能在寻找最短的解决方案:
我相信我能用上面的,63个字符的一行字来获胜:)。虽然这个解决方案很短,但我相信我的第一个解决方案更好,因为它更具可读性。记住,短并不总是更好!在
如果这是你想要的:
或者如果你想要简短的版本:
^{pr2}$输出:
相关问题 更多 >
编程相关推荐