我想在列表中找到一个单词,后面跟一个带有''。''的单词。例如,如果这是一个列表
test_list = ["hello", "how", "are.", "you"]
它会选择“你”这个词,我已设法将其关闭但我正在努力确保我不会得到重复的单词。 这是我到目前为止所拥有的
list = []
i = 0
bool = False
words = sent.split()
for word in words:
if bool:
list.append(word)
bool = False
# the bellow if statment seems to make everything worse instead of fixing the duplicate problem
if "." in word and word not in list:
bool = True
return list
答案 0 :(得分:3)
您可以使用zip()
和list comprehension
a = ['hello', 'how', 'are.', 'you']
def get_new_list(a):
return [v for k,v in zip(a, a[1:]) if k.endswith('.')]
然后,要删除重复项,如果有,请使用set()
,如下例所示:
final = set(get_new_list(a))
输出:
{'you'}
答案 1 :(得分:2)
这不是基于您发布的代码,但它应该完全符合您的要求。
def getWordAfterDot(words):
for index, word in enumerate(words):
if word.endswith('.') and len(words) - index > 1:
yield words[index + 1]
多次调用此函数将产生后跟句点的单词。
答案 2 :(得分:0)
以下是解决同一问题的不同方法。
import itertools
from collections import deque
t = deque(map(lambda x: '.' in x, test_list)) # create a deque of bools
>>deque([False, False, True, False])
t.rotate(1) # shift it by one since we want the word after the '.'
>>deque([False, False, False, True])
set(itertools.compress(test_list, t)) # and then grab everywhere it is True
>>{'you'}
答案 3 :(得分:0)
在itertools
配方中,pairwise
的定义对于一次迭代列表2非常有用:
def pairwise(iterable):
a, b = it.tee(iterable)
next(b, None)
return a, b
您可以使用它来创建以'.'
结尾的单词后面的单词列表:
words = [n for m, n in zip(*pairwise(l)) if m[-1] == '.']
删除重复项:
seen = set()
results = [x for x in words if not (x in seen or seen.add(x))]