我一直在搜索 itertools 的檔案以及 SO 一段時間,但還沒有找到我要找的東西。我希望反轉 for 回圈的執行順序,因此會發生以下情況:
for letter in ["A","B","C"]:
do_something(letter)
do_something_else(letter)
def do_something(letter):
print("do_something with " letter)
def do_something_else(letter):
print("do something_else with " letter)
for 回圈的正常輸出為:
do_something with A
do something_else with A
do_something with B
do something_else with B
do_something with C
do something_else with C
我希望它(迭代器)輸出如下:
do_something with A
do_something with B
do_something with C
do something_else with A
do something_else with B
do something_else with C
我不會說謊,這是漫長的一天,所以答案可能就在我的眼皮底下,到目前為止我想出的最好的答案是:
for letter in ["A","B","C"]:
do_something(letter)
for letter in ["A","B","C"]:
do_something_else(letter)
def do_something(letter):
print("do_something with " letter)
def do_something_else(letter):
print("do something_else with " letter)
但這感覺很笨拙,因為我在重復 for 回圈。非常感謝任何幫助。謝謝大家!
uj5u.com熱心網友回復:
進行兩次迭代:
for letter in ["A","B","C"]:
do_something(letter)
for letter in ["A","B","C"]:
do_something_else(letter)
uj5u.com熱心網友回復:
另一種選擇是對函式進行外回圈,對字母進行內回圈。
for f in [do_something, do_something_else]:
for letter in ["A","B","C"]:
f(letter)
然而,另一種選擇是在輸入函式上使用 itertools/product(輸出是所希望的)。
from itertools import product
for f, letter in product([do_something, do_something_else], ["A","B","C"]):
f(letter)
uj5u.com熱心網友回復:
怎么樣
results = [list(map(func,letters)) for func in [do_something,do_something_else]]
uj5u.com熱心網友回復:
您可以使用該itertools.tee()
函式創建兩個獨立的字母迭代器,并使用內置zip()
函式將函式和字母“編織”在一起,如下所示:
from itertools import tee
def do_something(letter):
print("do_something with " letter)
def do_something_else(letter):
print("do something_else with " letter)
for function, letters in zip((do_something, do_something_else), tee(["A","B","C"]) ):
for letter in letters:
function(letter)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/467206.html
標籤:Python python-3.x for循环 迭代工具
上一篇:如何重命名熊貓中資料框串列的列?