2013-10-04 63 views
0
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','和'],因为逃跑是在稍纵即逝的(下一个单词)和'和'在'绷带' 。如果没有发现这样的情况,应该返回一个空的list [],我的代码现在返回[]而不是['flee','和']。有人能指出我做错了什么吗?你查找的单词是连续的字

+0

你的'魔术'功能是做什么的?我的意思是,你能用你自己的话解释吗? –

+0

魔法函数应该检查C(列表中的一个单词)的索引并检查C长度范围内的连续单词(C [i + 1])(在这种情况下,长度为7,因此范围(0,7),然后返回任何真实的情况,然后将其转换为真正的单词 – user2847306

+0

你的魔法函数测试_equality_,而不是'C [i]'是否在'C [i + 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。

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'] 
0

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

此外,使用描述性的变量名而不是CAxBNmagic

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")