簡體   English   中英

將字符串附加到for循環中的列表

[英]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.

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