Skip to main content
 首页 » 编程设计

python之加快元组计数

2025年05月04日10kevingrace

对于我正在做的项目,我有兴趣创建符合以下条件的所有元组 (i,j,k,z,f) 的列表:

  • 所有五个变量都可以在 0 到 343 之间变化
  • i==k 或 j==z 或 k==f

到目前为止我想出的是:

z1=set() 
for i in xrange(344): 
    for j in xrange(344): 
        for k in xrange(344): 
            for z in xrange(344): 
                for f in xrange(344): 
                    if f!=k: 
                        continue 
                    z1.add((i,j,k,z,f)) 
for i in xrange(344): 
    for j in xrange(344): 
        for k in xrange(344): 
            for z in xrange(344): 
                for f in xrange(344): 
                    if z!=j: 
                        continue 
                    if (i,j,k,z,f) not in z1: 
                        z1.add((i,j,k,z,f)) 
for i in xrange(344): 
    for j in xrange(344): 
        for k in xrange(344): 
            for z in xrange(344): 
                for f in xrange(344): 
                    if k!=i: 
                        continue 
                    if (i,j,k,z,f) not in z1: 
                        z1.add((i,j,k,z,f)) 

这很慢。我在想可能有一种简单的方法可以加快我忽略的速度……有什么想法吗?

请您参考如下方法:

您需要更多内存。很多很多的内存。我们只看第一个条件,i == k。满足该条件的元组数为 343 ** 4 = 13841287201。 130亿!如果每个元组只需要 5*4 = 20 字节的内存,那么该集合仍然需要 257 GB。这甚至不是您想要的集合的所有元素。

所以,不,没有简单的出路。如果我要将这个问题优化到可管理的大小,我首先会问 mysqlf:我真的需要一个那么大的列表吗?或者我可以不用它来解决这个问题吗?