我怎样才能立即获得这个 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
方法可以选择任何a
值n
次(允许重复)。在您的情况下,a
是 len(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;我怎样才能增加这个?