【问题标题】:Why do these two implementations produce different results?为什么这两种实现会产生不同的结果?
【发布时间】:2023-04-11 06:35:01
【问题描述】:

我问了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)

好吧,由于多种原因,我的方式更糟。但在我看来,这两种方式至少应该产生相同的词对。然而,我使用他的实现得到的结果与我的不同。这是为什么呢?

【问题讨论】:

  • 在 Python 提示符下引用一对实际结果会使人们更快地回答问题。 :)

标签: python


【解决方案1】:

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

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

【讨论】:

  • 这实际上解释了很多。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多