我怎样才能立即获得这个 itertools.product() 的长度,因为 len(list()) 将花费无限长的时间来做到这一点?

Posted

技术标签:

【中文标题】我怎样才能立即获得这个 itertools.product() 的长度,因为 len(list()) 将花费无限长的时间来做到这一点?【英文标题】:How can i get the length of this itertools.product() immediately, because len(list()) will take infinitely long to do this? 【发布时间】:2020-03-19 07:25:18 【问题描述】:
from itertools import product

p = np.random.randint(1,2,2)
p = product(p, repeat=50)

我不知道如何立即获得 P 的长度

【问题讨论】:

这能回答你的问题吗? How to get the length of an itertools.product? 【参考方案1】:

这是简单的组合,不是真正的编程。有a**n 方法可以选择任何an 次(允许重复)。在您的情况下,alen(p)(原始 p,数组)或 2(因为您生成了一个包含两个值的数组),而 n 是 50,所以会得到 2**50或 1125899906842624 来自您的 product,如果您有大量时间来遍历它们。

现在,如果您正在寻找有多少 distinct 值,答案会更加简单(尽管如此微妙)。只生成了一个不同的值,一个包含 50 个值的元组。那是因为你从一个只包含值 1 的数组中获取产品,而不是其他任何东西,因为 numpy.random.randint(1, 2) 只给你1(不包括上限)。

【讨论】:

谢谢你的回答,也许我的问题不够清楚,我想知道是否有任何方法可以得到 itertool.product 的长度,而不用将它转换成列表,不管数字是多少在里面,谢谢 好吧,您可以对输入进行数学运算。如果您事先不知道长度是多少,请使用len(p)**50。通话后,不,我认为没有办法知道它会运行多长时间。也许实现它的代码可以弄清楚,但它不会在任何地方公开它。【参考方案2】:

产品迭代器将包含与您传入的所有可迭代对象的长度相乘的数量。 您正在传递一个可迭代但重复它 50 次。因此,您必须将 p 的长度相乘 50 倍。基本上就是len(p)**50

【讨论】:

以上是关于我怎样才能立即获得这个 itertools.product() 的长度,因为 len(list()) 将花费无限长的时间来做到这一点?的主要内容,如果未能解决你的问题,请参考以下文章

我只(总是)为 Youtube Data Api v3 获得 10 个 nextpagetoken;我怎样才能增加这个?

我怎样才能找到任何字符的立即重复?

UIAlertAction 的处理程序有点太晚了——我怎样才能让它立即生效?

我怎样才能获得 Viber 联系人(姓名和号码)?

Getline 不断获得换行符。我怎样才能避免这种情况?

对于一些微积分密集型代码,我怎样才能获得最快的迭代?