如何创建多个迭代

时间:2018-07-28 19:33:26

标签: python

我想知道如何创建一个迭代,该迭代将迭代多个或多个具有不同范围的参数 例如,我想实例化具有不同范围的迭代的几个对象 就像有一个带三个参数的三角函数一样,我该如何使用迭代为一个参数提供一个范围内的一个值,例如50至100,另一个参数完全不同 我知道如何通过以下方式在一个参数上实例化它:

for i in range(100):

但是如果它需要多个参数,我该怎么做呢

3 个答案:

答案 0 :(得分:1)

看起来您会想将 nested 用于循环。例如,您的三个参数函数:

# these are just example ranges, replace with what's meaningful for your problem
range_for_parameter_0 = range(100)
range_for_parameter_1 = range(150)
range_for_parameter_2 = range(75)

# start a nested for loop
for i in range_for_parameter_0:
    for j in range_for_parameter_1:
        for k in range_for_parameter_2:
            # you can print something out to see exactly what's happening
            # feel free to comment out the print statement
            print('Calling triangle_function with parameters {},{},{}'.format(i,j,k))

            # evaluate your triangle_function which takes 3 parameters
            triangle_function(i,j,k)

答案 1 :(得分:1)

您可以尝试遍历笛卡尔product

给出

import itertools as it


def is_tri(a, b, c):
    """Return True if the sides make a triangle."""
    a, b, c = sorted([a, b, c])
    return (a + b) > c

ranges = range(1, 2), range(1, 3), range(1, 5)

代码

[sides for sides in it.product(*ranges) if is_tri(*sides)]
# [(1, 1, 1), (1, 2, 2)]

详细信息

如果您不熟悉列表推导,则后者等效于以下代码:

results = []
for x, y, z in it.product(*ranges):
    if is_tri(x, y, z):
        results.append((x, y, z))

results
# [(1, 1, 1), (1, 2, 2)]

根据您的评论,is_tri()对参数进行预排序,因此可以互换它们:

assert is_tri(13, 12, 5) == True 
assert is_tri(12, 5, 13) == True
assert is_tri(5, 13, 12) == True

如果您的范围相同,则可以使用repeat参数来简化输入,例如it.product(range(1, 101), repeat=3)

答案 2 :(得分:0)

不能。您需要进行三个迭代。

for i in range(x):
    ...

for j in range(y):
    ...

for k in range(z):
    ...

请参见range()定义here