Sch*_*ote 1 python iteration python-3.x
所以,假设我有一个任意长的数字列表.我想获得该列表中每个数字的列表乘以该列表中的每个数字.我通过嵌套这样的for循环来做到这一点:
for x in numbers:
for y in numbers:
print(x*y)
Run Code Online (Sandbox Code Playgroud)
现在,如果我想将该列表中的每个数字相乘,该列表中的每个数字都会再次对该列表中的每个数字进行计时,我会这样做:
for x in numbers:
for y in numbers:
for z in numbers:
print(x*y*z)
Run Code Online (Sandbox Code Playgroud)
我的问题是我正在搜索子图的图形,我需要允许任意大的子图.为此,我必须构造每个具有来自主图中边缘的n个边的子图 - 我必须允许n的任意值.怎么样?
itertools.product具有迭代产品计算功能(我赞成reduce(mul, ...)).如果你需要n产品(在"产品"这两个词的意义上):
from functools import reduce
from operator import mul
for numset in itertools.product(numbers, repeat=n):
print(reduce(mul, numset))
Run Code Online (Sandbox Code Playgroud)
上面很简单,但是当值集很大时,它将不必要地重新计算部分产品n >= 3.可以使用递归函数来避免:
def compute_products(numbers, repeat):
if repeat == 1:
yield from numbers
return
numbers = tuple(numbers) # Only needed if you want to handle iterator/generator inputs
for prod in compute_products(numbers, repeat-1):
yield from (prod * x for x in numbers)
for prod in compute_products(numbers, n):
print(prod)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |