所以我试图让函数工作,返回一个新的单个字符列表,紧跟其他两个给定的字符。像这样:
def filter_possible_chars(corpus, last):
"""
>>> filter_possible_chars('lazy languid line', 'la')
['z', 'n']
>>> filter_possible_chars('pitter patter', 'tt')
['e', 'e']
"""
char_list = []
corpus_split = corpus.split()
for word in corpus_split:
if last in word:
word_split = word.split(last)
follows_last = word_split[1]
char_list.append(follows_last[0])
return char_list
此函数适用于docstring中给出的示例,但是我需要包含包含空格的示例,例如:
>>> filter_possible_chars('when the goat jumped to the rock', ' t')
它会回来:
['h', 'o', 'h']
但由于我的功能显然正在删除空格,我认为我需要尝试一种完全不同的方法。我想过不将字符串拆分成单个单词并尝试使用给定的字母索引它,但我想不出一种方法可以使字符串中的多个实例工作。
答案 0 :(得分:4)
>>> pat="tt"
>>> corpus="pitter patter"
>>> print(re.findall("%s(.)"%pat,corpus))
['e', 'e']
>>> corpus,pat = 'when the goat jumped to the rock', ' t'
>>> re.findall("%s(.)"%pat,corpus)
['h', 'o', 'h']
>>> corpus,pat = 'lazy languid line', 'la'
>>> re.findall("%s(.)"%pat,corpus)
['z', 'n']
%
是string formatting运算符,因此例如"%s(.)" % "la"
的计算结果为"la(.)"
。
在regular expressions中,.
是“任何字符”的模式,()
定义组,其值可以在以后检索,例如使用findall
:
如果模式中存在一个或多个组,则返回组列表
因此,例如,模式la(.)
表示“搜索la
后跟任何字符,并捕获该字符”。
答案 1 :(得分:3)
你的想法如何解决这个问题是完全没问题的。您应该尝试在完整last
中找到corpus
的所有实例,而不是将句子拆分为单词。但是,嘿,实际上split
函数可以为你做这个。
corpus = 'when the goat jumped to the rock'
spl = corpus.split(' t')
print spl
>> ['when', 'he goat jumped', 'o', 'he rock']
res = [x[0] for x in spl[1:] if len(x) > 0]
print res
>> ['h', 'o', 'h']
因此,您可以将corpus
拆分为last
,然后从没有第一个得到的所有字符串中获取所有字符串(因为它不是以last
开头),然后从每个字符串获取第一个字母串。