将字符串附加到for循环中的列表

时间:2017-06-09 17:13:33

标签: python 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

我只需要最后的结果。我怎么做到的?

6 个答案:

答案 0 :(得分:1)

您当前代码的问题在于每次迭代后都要打印。通过将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

答案 1 :(得分:0)

只需在循环外移动打印:

for i in range (len(loglist)):
    splitLetter = loglist[i].split('.')
    letter = splitLetter[-1]
    newlist.append(letter)

word = ''.join(newlist)
print word

答案 2 :(得分:0)

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

答案 3 :(得分:0)

word = ''.join([ l.split('.')[-1] for l in loglist ])

而不是整个for循环应该这样做。

答案 4 :(得分:0)

您正在每一步打印结果。只需在for循环后打印。

您可以将生成器表达式用于更短的程序:

with open('hello.txt') as logs:
    word = ''.join(l.strip().split('.')[-1] for l in logs)
print word

答案 5 :(得分:0)

使用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