2
我有兩個列表,我稱其爲old_rows和new_rows。在列表的兩個列表中查找已更改或新行
每一行都是一個包含30個項目的列表。每個列表中可能有非常大的(和未知的)數量的行。這兩個列表可能包含不同數量的行。
[ [row1_item1, row1_item2... row1_item30],
[row2_item1, row2_item2... row2_item30],
....
[rowN_item1, rowN_item2... rowN_item30] ]
其中N很大且可變。
我希望做的是比較old_rows和new_rows,創造的「顯著差異」名單 - 我只對行之間比較約10個項目有興趣。我已經有一個函數比較兩行只有這些項目。
所以,我想這一點:
changes = []
for o, n in izip_longest(old_rows, new_rows):
if not o:
changes.append(output_row(None, n))
continue
if not n:
continue
if significant_differences(o, n):
changes.append(output_row(o, n))
煩人,這需要在Python 2.4工作,所以izip_longest出來了。此外,code for izip_longest不起作用,因爲不明原因的接下來的不是2.4友好的。
理想情況下尋找pythonic和快速使用發電機來應付潛在的非常大的名單。
'元組(圖(下,迭代器))'可以改爲'元組(i.next(),用於我在迭代器中)'對於Py <= 2.6是否解決了你的問題?或者'從運算符導入methodcaller''元組(地圖(methodcaller('next'),iterators))'可能會快一點 – jamylak 2013-05-08 11:26:44
感謝您的第一行解決了這個問題。 methodcaller顯然是在2.6中引入的。 – 2013-05-08 12:07:11
噢好吧,我會將其作爲答案提交,如果它能夠工作,您可以接受。 – jamylak 2013-05-08 12:09:29