我问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)
好吧,出于多种原因,我的方式更糟糕。但在我看来似乎两种方式至少应该产生相同的单词对。然而,我使用他的实现得到的结果不同于我的结果。那是为什么?
答案 0 :(得分:10)
因为index(c)
询问单词中字母的 first 出现的索引 - 所以您要为每个字母创建一个“存储桶”。因此,如果第一个'a'
是奇数,那么{em>所有的'a'
个字母也会被填充到“奇数”字符串中。要解决此问题,您应该使用enumerate()
来计算:
for i, c in enumerate(word):
# check whether ``i`` is even/odd, etc