[英]Appending strings to a list in for loop
假設我有一個文本文件,其中每個新字母都以新行開頭:
-.H
-.e
-.l
-.l
-.o
我想編寫一個代碼來從每個文本行中刪除一些數據(在示例中我想刪除每個字母前面的' - 。')然后將結果連接在一起形成:
Hello
這種問題的一般方法是什么? 我認為可以通過以下方式解決:
f = open('hello.txt', 'r')
logs = f.readlines()
f.close()
loglist = list(map(str.strip, logs))
newlist = []
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
newlist.append(letter)
word = ''.join(newlist)
print word
但問題是結果是一系列迭代:
H
He
Hel
Hell
Hello
我只需要最后的結果。 我怎么做到的?
當前代碼的問題在於每次迭代后都要打印。 通過移動print
語句外的for循環,將只打印最后一次迭代。
f = open('hello.txt', 'r')
logs = f.readlines()
f.close()
loglist = list(map(str.strip, logs))
word = ''.join(l.split('.')[-1] for l in loglist)
print word
為了確保這一點,我用一個帶有以下文本的測試文件對其進行了測試:
-.G
-.o
-.o
-.d
-.b
-.y
-.e
得到以下結果:
Goodbye
只需在循環外移動打印:
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
newlist.append(letter)
word = ''.join(newlist)
print word
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
newlist.append(letter)
word = ''.join(newlist)
print word
要么
word = ''
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
word += letter
print word
word = ''.join([ l.split('.')[-1] for l in loglist ])
而不是整個for
循環應該做。
您將在每個步驟中打印結果。 只需在for循環后打印即可。
您可以使用生成器表達式來縮短程序:
with open('hello.txt') as logs:
word = ''.join(l.strip().split('.')[-1] for l in logs)
print word
使用with ... as
語句可以使您無法關閉文件。 它將在塊結束時自動關閉。
然后,在一行中: word = ''.join([l.strip()[-1]] for l in logs)
如果先刪除字符串,則無需拆分字符串。 您可以確定該字母將位於最后一個索引處。
完整代碼 :
with open('hello.txt', 'r') as logs:
word = ''.join([l.strip()[-1]] for l in logs)
print word
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.