【问题标题】:How to do two for loops in a single python loop?如何在单个 python 循环中执行两个 for 循环?
【发布时间】:2020-05-27 21:30:33
【问题描述】:

我并不是要缩短这个:

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?

【问题讨论】:

  • 你可以试试while循环。 i = 0 而 i
  • 试试for x,y in zip(data1, data2):

标签: python dataframe naivebayes


【解决方案1】:

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

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])

【讨论】:

  • 它有效,结果不可疑(仅不是 YES),谢谢!
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多