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