用4个循环获取Python的所有素数组合

2024-03-29 00:10:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想以所有可能的组合生成四个素数的列表,这样这些数字就不会在列表中重复。你知道吗

我知道如何用这个函数得到我想要的:

def combinations():
    primeList = [2, 3, 5, 7, 11, 13, 17]
    length = len(primeList)
    for i in range(0, length-3): 
        for j in range(i+1, length-2):
            for k in range(j+1, length-1):
                for h in range(k+1, length):
                    print([primeList[i], primeList[j], primeList[k], primeList[h]])

返回这样的列表:http://postimg.org/image/94u3hzgqb/

但是我想使用像下面这样构造的代码,因为我想要这个特殊的结构,并且想知道为什么它不能像我刚才复制粘贴的函数那样工作。你知道吗

def combinations2():
    primeList = [2, 3, 5, 7, 11, 13, 17]
    for i1, i in enumerate(primeList[0: -3]): 
        for i2, j in enumerate(primeList[i1+1: -2]):
            for i3, k in enumerate(primeList[i2+1: -1]):
                for h in primeList[i3+1:]:
                    print([i, j, k, h])

返回包含重复元素的列表:http://postimg.org/image/y0h0gwfhf/

显然,我使用for循环枚举错误的方式,但似乎无法找出哪里可能是错误的。对我来说,这两个函数看起来应该做相同的事情。你知道吗

如果可以的话,请指出我犯的错误或者纠正我。你知道吗


Tags: 函数inorgimagehttp列表fordef
1条回答
网友
1楼 · 发布于 2024-03-29 00:10:39

因为i1,i2,i3都是从零开始的。在第一次迭代中,您有

primeList[i1+1: -2] = [3, 5, 7, 11]
primeList[i2+1: -1] = [3, 5, 7, 11, 13]
primeList[i3+1:]    = [3, 5, 7, 11, 13, 17]

这是正确的功能:

def combinations2():
    primeList = [2, 3, 5, 7, 11, 13, 17]
    for i1, i in enumerate(primeList[0: -3]):
        for i2, j in enumerate(primeList[i1+1: -2]):
            for i3, k in enumerate(primeList[i1+i2+2: -1]):
                for h in primeList[i1+i2+i3+3:]:
                    print([i, j, k, h])

相关问题 更多 >