簡體   English   中英

使用itertools的兩個循環

[英]Using two loops of itertools

我正在嘗試運行itertools的兩個循環,但出現錯誤。 這是我的代碼:

import itertools
with open('lognew.txt', 'r') as f:
    firstlines = itertools.islice(f, 0, None, 1)
    secondlines = itertools.islice(f, 0, None, 2)

    for (line1 in firstlines) and (line2 in secondlines):
        print line1 + line2 

我收到此錯誤:

File "C:\Users\abhi\Desktop\logedit.py", line 15
    for (line1 in firstlines) and (line2 in secondlines):
                            ^
SyntaxError: invalid syntax

我想要這樣的結果:

<first line in firstlines> is meaning of  <first line in secondlines>
<second line in firstlines>  is meaning of <second line in secondlines>
<third line in firstlines>  is meaning of <third line in secondlines>

讀取文件沒有錯誤,因為以下代碼成功打印了行。

for line1 in firstlines :
    print line1
for line2 in secondlines :
    print line2

非常感謝您的幫助。

您的切片將無法執行您認為會執行的操作。 第一個切片只給您第一行,第二個切片給您第二行 ,前提是您在第一個切片之后對其進行了迭代。 那是因為輸入文件已經前進了一行,所以第二個切片對象將在迭代時跳過其中一個,為您提供下一個。 如果壓縮了文件,則需要第1行,第3行,第4行,第6行,依此類推。

您真正想要的是成對線路循環。 為此,您根本不需要使用切片。 使用itertools.izip() ; 它將每兩行壓縮在一起:

from itertools import izip

with open('lognew.txt', 'r') as f:
    for line1, line2 in izip(f, f):
        print line1.rstrip('\n') + line2

每次迭代時, izip()都會從第一個參數(打開文件對象f )獲取一個值,然后從第二個參數( 打開文件對象f )獲取一個值。 由於文件對象每次迭代都前進到下一行,因此以上內容有效地為您提供了文件中成對的行。

請注意,如果文件的行數為奇數,則看不到最后一行。 如果需要訪問最后一行,請改用itertools.izip_longest()

from itertools import izip_longest

with open('lognew.txt', 'r') as f:
    for line1, line2 in izip_longest(f, f, fillvalue='\n'):
        print line1.rstrip('\n') + line2

如果行數為奇數,它將添加一個空行( fillvalue='\\n' )。

在Python 3中, itertools.izip()取代了內置的zip()函數,並且itertools.izip_longest()已重命名為itertools.zip_longest()

for line1, line2 in itertools.izip(f1, f2):

Python雙迭代

暫無
暫無

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

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