gpt4 book ai didi

python - 使用循环中的参数具有不同数量的 for 循环的函数

转载 作者:行者123 更新时间:2023-12-02 02:59:54 25 4
gpt4 key购买 nike

首先我想说我已经阅读了这篇文章:

Function with varying number of For Loops (python)

虽然它看起来确实与我想知道的相似,但我(根本)对递归还不够熟练,无法使其发挥作用。

如果我有以下代码片段:

I = ["i" + str(i+1) for i in range(3)]
J = ["j" + str(i+1) for i in range(4)]
K = ["k" + str(i+1) for i in range(2)]

然后我可以创建一个执行如下操作的函数:

def f(*Sets):
size = len(Sets)
if size == 1:
for i in Sets[0]:
print(i)
elif size == 2:
for i in Sets[0]:
for j in Sets[1]:
print(i,j)
elif size == 3:
for i in Sets[0]:
for j in Sets[1]:
for k in Sets[2]:
print(i,j,k)

执行时,会产生如下结果:

>>f(I)
i1
i2
i3

>>f(I,J)
i1,j1
i1,j2
...
i3,j4

>>f(I,J,K)
i1,j1,k1
i1,j1,k2
...
i3,j4,k2

print 语句只是一个示例。我想在检查循环变量或字典的同时实际访问 pandas 数据框中的元素,因此它将包含一些命令,例如 print(i,j,k, ":",dictionary[i ,j,k])。我需要访问循环中的每个变量,这就是我的意思。

在我看来,可以使用某种递归来大大减少。因为如果我需要四个列表,我就必须添加另一个 elif。但我没有递归思维,不知道如何解决它。

或者也许根本无法完成。不再确定任何事情:P

最佳答案

您可以使用递归来实现此目的,但最简单的就是使用 itertools.product :

from itertools import product

def f(*sets):
for p in product(*sets):
# e.g. (1, 3, 5)
print(*p)

>>> f([1, 2], [3, 4], [5, 6])
1 3 5
1 3 6
1 4 5
1 4 6
2 3 5
2 3 6
2 4 5
2 4 6

producttuples 上的惰性迭代器的形式返回输入可迭代对象的笛卡尔积。

笛卡尔积的简单递归实现将遵循以下原则:

def f(*sets):
if not sets:
return [[]]
result = []
for head in sets[0]:
for combo in f(*sets[1:]):
result.append([head] + combo)
return result

>>> f([1, 2], [3, 4])
[[1, 3], [1, 4], [2, 3], [2, 4]]

关于python - 使用循环中的参数具有不同数量的 for 循环的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60223373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com