2011-04-02 288 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

相关问题