我想要一個計數器來保持計算總共完成了多少次迭代。 我做的:在嵌套for循環中獲取迭代計數器
counter = 0;
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
counter += 1;
但我不禁會問有沒有更Python的方式?
我想要一個計數器來保持計算總共完成了多少次迭代。 我做的:在嵌套for循環中獲取迭代計數器
counter = 0;
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
counter += 1;
但我不禁會問有沒有更Python的方式?
它的簡單性和可讀性,這是我們所Python的,因爲它得到(除了分號。)
我唯一的建議是,如果你開始把更多的代碼到這些給i
和j
更具描述性的名稱循環。
for counter,ijpair in enumerate(itertools.product(enumerate(items),enumerate(other))):
i,j = ijpair
//... do stuff
由於Codemonkey所指出的,我們這裏沒有增加可讀性,並規定了明確的使用,它不是一個真正的改善。然而,枚舉和itertools.product表達式都是生成器/迭代器,所以它們可以傳遞給其他函數,如地圖在那裏使用。所以,你可以篩選哪裏的項目,並otheritem是相同的值:
allelements = itertools.product(items, others)
sameys = itertools.ifilter(lambda a: a[0]==a[1], allelements)
現在sameys具有完全相同的結構allelements
。關鍵是整個迭代集合成爲一個迭代器表達式,而不是一個循環結構,它可以更容易傳遞。
我不認爲這是*更Python *儘可能少* *可讀性。 – Hubro
沒有'counter',迭代器可以是無限的,它符合'flat比嵌套'Zen要好,itertools是Python中包含的一個電池(產品是v2.6)。但是,是的,閱讀起來不那麼「簡單」。 –
它也很容易切換到組合,替換等組合等 –
我想說的最Python的方式是記錄i
和j
而非count
,因爲元組(i,j)
有更多的意義比count
- 你可以從(i,j)
計算計數!
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
where_i_am = (i,j)
# count = i*len(anotheritems) + j + 1
total_iterations = len(items) * len(anotheritems) # equivalently (i+1) * (j+1)
更Python的方式是相同的,但沒有分號:) –