如何在单个 python 循环中执行两个 for 循环?

How to do two for loops in a single python loop?

我不是要缩短这个:

for x in data1:
    for y in data2:
        *lines*

但要做到这一点:

for x in data1:
    *lines*

for y in data2:
    *lines*

像这样进入一个循环(x 是来自 data1 的行,y 只是来自 data2 的行):

for x,y in data1,data2:
    *lines*

这可能吗?我想在一个循环中拟合然后预测朴素贝叶斯数据:

# group data by prodi
for no, dfx_prodi in dfx.groupby('prodi'):
    # implement naive bayes fit data
    bnb.fit(dfx_prodi[var], dfx_prodi['daftar_kembali'])

for no, dfy_prodi in dfy.groupby('prodi'):
    # implement naive bayes predict data
    y_pred = bnb.predict(dfy_prodi[var])

它有效,但结果似乎可疑,有没有办法在保持 groupby 的情况下在一个循环中完成?

除非我误解了什么,你可以直接使用 zip 函数,例如 as

for x,y in zip(x_list,y_list):
    print(x,y)

在你的情况下应该是这样的

for (no, dfx_prodi), (no, dfy_prodi) in zip(dfx.groupby('prodi'), dfy.groupby('prodi')):
    # implement naive bayes fit data
    bnb.fit(dfx_prodi[var], dfx_prodi['daftar_kembali'])
    y_pred = bnb.predict(dfy_prodi[var])

如果两个列表(可迭代对象)data1 和 data2 的长度相同,您可以这样做:

for x, y in zip(data1, data2):
    do_something(x, y)

zip 从 2 个或更多可迭代对象创建元组 (x, y)。如果 data1 和 data2 的长度不同,您可以查看 itertools 标准库中的 zip_longest(它为缺失项添加 None 值)。