如何使用切片列出文本中每个单词中的最后两个字母?

时间:2017-09-21 09:12:28

标签: python

我是Python新手,我正在努力解决任务。

我有一个很长的文字,让我们称之为"文件"。我想列出本文中每个单词的最后两个字母。 这就是我所拥有的,以及我认为可行的方法:

list=[i[-2:] for i in file]

print(list)

但相反,我的列表包含文本中的每个字符,而不仅仅是每个单词的最后两个字母。

有人可以帮帮我吗?

4 个答案:

答案 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']