簡體   English   中英

如何在單個 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功能,例如

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值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM