2013-10-04 111 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")