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

この関数の目的は、連続する各単語の中にある単語のリストを作成することです。たとえば、この関数は文字列 ""So fly flyting candy can and bandage" を入力として受け取り、['flee', 'and'] を返します。これは、flee が freeting (次の単語) 内にあり、'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]最後の項目の 1 つ前で必ず停止するように使用します。そうしないC[i+1]と、IndexError が発生します。

于 2013-10-04T16:17:04.193 に答える
0

先のことを考えると、問題が生じる可能性があります。現在の単語が次の単語に含まれているかどうかをテストする代わりに、の単語が現在の単語に含まれているかどうかを確認します。これにより、ほとんどの場合、物事が簡単になります。

Cまた、 and Aand xand Band and 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 に答える