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

Python 将字符串追加到for循环中的列表,python,for-loop,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

假设我有一个这样的文本文件,每个新字母都从一行开始:

-.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

我只需要最后的结果。我怎样才能得到它?

只需将打印移到循环之外:

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

word = ''.join(newlist)
print word


当前代码的问题是每次迭代后都要打印。通过将
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
循环应该执行。

您正在打印每个步骤的结果。只需在for循环后打印即可

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

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

与。。。as
语句使您不必关闭文件。它将在区块结束时自动关闭

然后,在一行中:
word=''.join([l.strip()[-1]]用于日志中的l)

如果之前剥去了字符串,则不需要拆分字符串。你可以肯定这封信会在最后一个索引处

完整代码

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

这是一个很好的解决方案。我仍然需要循环,因为我打算应用条件。在列表理解中也可以使用条件(
if
子句)。当然,除非您需要分配给临时变量,否则分配不能在列表理解范围内完成。是的,这应该是自解释的。我现在在这里问这个问题感到很难过有时,大脑在长时间的编码后会停止正常工作。@kevin你可以删除[]内的join,
'.join(l.split('..)[-1]表示日志列表中的l)
LOL@愤怒女王在事件发生两个月后否决了所有人。
word = ''.join([ l.split('.')[-1] for l in loglist ])
with open('hello.txt') as logs:
    word = ''.join(l.strip().split('.')[-1] for l in logs)
print word
with open('hello.txt', 'r') as logs:
    word = ''.join([l.strip()[-1]] for l in logs)
print word