找到连续单词内的单词

时间:2013-10-04 16:07:14

标签: python function

def sucontain(A):
    C = A.split()
    def magic(x):
        B = [C[i]==C[i+1] for i in range(len(C)-1)]
        return any(B)
    N = [x for x in C if magic(x)]
    return N
Phrase = "So flee fleeting candy can and bandage"
print (sucontain(Phrase))

此功能的目标是创建每个连续单词内的单词列表。例如,该功能将采用字符串“”所以逃离转瞬即逝的糖果罐头和绷带“作为输入和返回['逃离','和']因为逃离在里面转瞬即逝(下一个字)和'和'在'绷带'里面如果没有找到这样的案例,应该返回一个空列表[]。我的代码现在返回[]而不是['flee','和']。有人可以指出我做错了吗?谢谢你

3 个答案:

答案 0 :(得分:7)

只需将连续的单词配对,然后它就变成了一个简单的列表理解...

>>> s = "So flee fleeting candy can and bandage"
>>> words = s.split()
>>> [i for i, k in zip(words, words[1:]) if i in k]
['flee', 'and']

答案 1 :(得分:2)

您的magic功能肯定有问题。它接受x作为参数但不在任何地方使用它。

这是一个不使用附加功能的替代版本:

def sucontain(A):
    C = A.split()
    return [w for i, w in enumerate(C[:-1]) if w in C[i+1]]

enumerate()函数允许我们将索引和值循环在一起,这使得它非常直接地执行测试。 C[i+1]是下一个值,w是当前值,因此w in C[i+1]会检查当前值是否包含在下一个值中。我们使用C[:-1]来确保我们在最后一项之前停止一个,否则C[i+1]将导致IndexError。

答案 2 :(得分:0)

展望未来可能会有问题。不是测试当前单词是否在下一个单词中,而是检查上一个单词是否在当前单词中。这几乎总能使事情变得更简单。

此外,使用描述性变量名称代替CA以及xB以及Nmagic

def succotash(text):   # okay, so that isn't very descriptive
    lastword = " "     # space won't ever be in a word
    results = []
    for currentword in text.split():
         if lastword in currentword:
             results.append(currentword)
         lastword = currentword
    return results

print succotash("So flee fleeting candy can and bandage")