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

此函数的目标是创建每个连续单词内部的单词列表。例如,该函数将字符串““Soflefleeting candy can and bandage”作为输入并返回['flee', 'and'],因为flee在fleeting(下一个单词)中,而'and'在'bandage'中.如果没有找到这样的情况,应该返回一个空列表[]。我的代码现在返回[]而不是['flee','and']。有人能指出我做错了什么吗?谢谢你

4

3 回答 3

7

只需将连续的单词配对,就变成了一个简单的列表理解……</p>

>>> 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']
于 2013-10-04T16:18:31.727 回答
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。

于 2013-10-04T16:17:04.193 回答
0

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

此外,使用描述性变量名称代替Cand Aand xand and Band Nand magic

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")
于 2013-10-04T16:20:00.280 回答