为什么这两个实现产生不同的结果?

时间:2011-04-02 12:58:29

标签: python

我问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 个答案:

答案 0 :(得分:10)

因为index(c)询问单词中字母的 first 出现的索引 - 所以您要为每个字母创建一个“存储桶”。因此,如果第一个'a'是奇数,那么{em>所有的'a'个字母也会被填充到“奇数”字符串中。要解决此问题,您应该使用enumerate()来计算:

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