2015-02-05 59 views
1

interactivepython.org提供的Count and Compare Anagram solution通過列表檢查迭代,以便最終檢查每個ASCII值的計數是否相同。Python中的這個列表比較是否不必要?

j = 0 
stillOK = True 
while j<26 and stillOK: 
    if c1[j]==c2[j]: 
     j = j + 1 
    else: 
     stillOK = False 

return stillOK 

爲什麼不使用比較運算符?

return (c1 == c2) 

全碼:

def anagramSolution4(s1,s2): 
    c1 = [0]*26 
    c2 = [0]*26 

    for i in range(len(s1)): 
     pos = ord(s1[i])-ord('a') 
     c1[pos] = c1[pos] + 1 

    for i in range(len(s2)): 
     pos = ord(s2[i])-ord('a') 
     c2[pos] = c2[pos] + 1 

    j = 0 
    stillOK = True 
    while j<26 and stillOK: 
     if c1[j]==c2[j]: 
      j = j + 1 
     else: 
      stillOK = False 

    return stillOK 

print(anagramSolution4('apple','pleap')) 

編輯補充:

anagramSolution4('abc','cba') #returns True 
anagramSolution4('abc','cbd') #returns False 
anagramSolution4('abc','cbah') #returns False 

..they所有通:

我已經與測試。顯示c1 == c2失敗的適當測試是什麼?

+2

你爲什麼不試試代碼並找出它是否有效? – MattDMo 2015-02-05 20:50:19

+0

是的,這是必要的,因爲在沒有這個循環的情況下沒有輸入之間的比較......有更好的方法來完成整個事情,但該循環當前是必需的。 – Ben 2015-02-05 20:51:54

+0

@MattDMo我做了,它通過了測試'anagramSolution4('abc','cba')'和'anagramSolution4('abc','cbd')'和'anagramSolution4('abc','cbah')' – Jack 2015-02-05 20:53:57

回答

2

在兩個列表上使用==會產生相同的結果,但也會隱藏一些實現細節。鑑於腳本來自用於學習的網站,我想這是用於學習的目的。

此外,我看到在網頁中,您會被問到一些關於複雜性的問題。那麼,使用c1 == c2而不是循環可能會誤導一些人,讓他們認爲操作是O(1)而不是O(min(len(c1),len(c2)))[1]

最後,請注意,有許多語言沒有列表的概念。


[1]這不一定是真實的或者,當兩個列表可以包含定製的和複雜的__eq__()方法的項目。