2011-04-02 98 views
2

我問了this question,並得到了一個很好的答案(謝謝!)。部分問題需要解決,包括對單詞進行去隔行處理,以便得到兩個單詞,一個包含原始單詞的偶數索引字符,另一個包含奇數索引字符。這兩個實現爲什麼會產生不同的結果?

,應答器使用下面的代碼來做到這一點:

for w in words: 
    even, odd = w[::2], w[1::2] 

我做到了這一點(糟糕)的方式:

for w in words: 
    lst1 = [] 
    lst2 = [] 
    for c in w: 
     if w.index(c) % 2 == 0: 
      lst1.append(c) 
     else: 
      lst2.append(c) 
    even = ''.join(lst1) 
    odd = ''.join(lst2) 

好了,我的方法是有很多原因更糟。但在我看來,似乎兩種方式至少應該產生相同的單詞對。然而,使用他的實現,我得到了不同的結果。這是爲什麼?

+1

在Python提示符引述一對實際結果將使這個問題有點快的人來回答。 :) – 2011-04-02 12:59:37

回答

10

因爲index(c)要求第一個索引發生在單詞中的字母 - 所以你正在爲每個字母創建一個單一的「桶」。所以如果第一個'a'是奇數,那麼的所有'a'字母也會被塞進「奇數」字符串中。爲了解決這個問題,你應該只使用enumerate()數:

for i, c in enumerate(word): 
    # check whether ``i`` is even/odd, etc 
+0

這實際上解釋了很多。謝謝! – 2011-04-02 13:04:23

相關問題