我是Python新手,我正在努力解决任务。
我有一个很长的文字,让我们称之为"文件"。我想列出本文中每个单词的最后两个字母。 这就是我所拥有的,以及我认为可行的方法:
list=[i[-2:] for i in file]
print(list)
但相反,我的列表包含文本中的每个字符,而不仅仅是每个单词的最后两个字母。
有人可以帮帮我吗?
答案 0 :(得分:3)
看起来您的file
不是文件,而是字符串。
>>> file = "abc\ndef"
>>> [i[-2:] for i in file]
['a', 'b', 'c', '\n', 'd', 'e', 'f']
由于file
是一个字符串,for i in file
遍历字符串的每个字符。 list
是每个角色的最后两个角色:它基本上是每个角色。
您需要迭代文件的每一行,并在每行的每个单词上再次迭代。为此,您可以使用line.split()
。
以下是一个例子:
with open('test.txt') as f:
word_endings = [w[-2:] for line in f for w in line.split()]
print(word_endings)
# ['bc', 'ef', 'hi', 'lm']
顺便说一下,你应该避免覆盖已定义的Python变量(例如list
)。
答案 1 :(得分:2)
你的file
变量可能是缓冲区本身,而不是文件句柄。但无论如何,你需要一些分裂。
如果f
是文件句柄,您可以迭代这些行,使用str.split
拆分它们,并取最后两个字符。
result = [w[-2:] for line in f for w in line.split()]
如果f
是缓冲区,则不需要2个循环:
result = [w[-2:] for w in f.split()]
当您的文字中有标点符号时,此方法过于简单。在这种情况下,最好使用re.split
进行拆分,如下所示:
import re
f = """Hello, I'm John.
How are you ?""".splitlines() # kind of emulate a file handle iterator
result = [w[-2:] for line in f for w in re.split("\W+",line) if w]
print(result)
结果:
['lo', 'I', 'm', 'hn', 'ow', 're', 'ou']
当然,这种方法也适用于简单的情况。请注意过滤掉一些寄生虫空标记(if w
),这些标记在str.split
没有参数的情况下不会发生。好吧,我们可以忍受。
答案 2 :(得分:0)
您必须拆分字符串,以便可以将文本列为单词列表。
very_long_text = "consists EVERY character in the text, and not only the last two letters of every word."
print ([line[-2:] for line in very_long_text.split(" ")])
你的计划:
input_list=[i[-2:] for i in file.split(" ")]
print(input_list)
答案 3 :(得分:0)
如果您的文字文件是:
this is my first line
a second line
third line
以下脚本会读取每一行,将其拆分为单词列表,并将每个行的结尾添加到列表word_endings
中:
word_endings = []
with open('input.txt') as f_input:
for line in f_input:
word_endings.extend([word[-2:] for word in line.split()])
print(word_endings)
这会给你:
['is', 'is', 'my', 'st', 'ne', 'a', 'nd', 'ne', 'rd', 'ne']