要在「鎖步」中遍歷多個列表(技術上,iterables),可以使用zip
。在這種情況下,你要遍歷四個版本的mylist
,0,12,2和13
zippedLists = zip(mylist, mylist[12:], mylist[2:], mylist[13:])
接下來,你要第0,12日,24日等因素所抵消。這是通過切片進行:
slicedList = zippedLists[::12]
然後你可以遍歷是:
for elt1, elt13, elt2, elt14 in slicedList:
if elt1 == elt13 and elt2 == elt14:
print elt1
與文件操作將其組合在一起,我們得到
#prints out samenodes
f = open('newerfile.txt')
mylist = list(f)
zippedLists = zip(mylist, mylist[12:], mylist[2:], mylist[13:])
slicedList = zippedLists[::12]
for elt1, elt13, elt2, elt14 in slicedList:
if elt1 == elt13 and elt2 == elt14:
print elt1
這樣的代碼通常被認爲是比當前版本更「pythonic」,因爲當你迭代列表時,使用列表索引通常是不鼓勵的。
請注意,如果您的列表中有大量元素,上面的代碼會創建五個額外的列表(並在某些時候銷燬)。因此,如果你在itertools
,其中使用惰性迭代器,以防止複製使用等效的功能,你可能會得到更好的內存性能列出不必要的:
from itertools import islice, izip
#prints out samenodes
f = open('newerfile.txt')
mylist = list(f)
zippedLists = itertools.izip(mylist, islice(mylist, 12), islice(mylist, 2), islice(mylist, 13))
slicedList = itertools.islice(zippedLists, 0, None, 12)
for elt1, elt13, elt2, elt14 in slicedList:
if elt1 == elt13 and elt2 == elt14:
print elt1
有可能在itertools
的方式,以避免整個文件啜到mylist
,但我不確定我是否記得它是什麼 - 我認爲這是itertools.tee
的用例。
'elt'應該是整行嗎? –