我想知道如何创建一个迭代,该迭代将迭代多个或多个具有不同范围的参数 例如,我想实例化具有不同范围的迭代的几个对象 就像有一个带三个参数的三角函数一样,我该如何使用迭代为一个参数提供一个范围内的一个值,例如50至100,另一个参数完全不同 我知道如何通过以下方式在一个参数上实例化它:
for i in range(100):
但是如果它需要多个参数,我该怎么做呢
答案 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)