python - 这个用于其他字母函数的 Python 代码有什么问题?

标签 python function modulo

我正在尝试编写一个函数来提取任何给定单词的每隔一个字母。有人可以解释一下为什么这段代码不产生每隔一个字母吗?

def other_letter(word):
    other_letter = ""
    for letter in word:
        if word.index(letter) % 2 == 0:
            other_letter += letter
    return other_letter

print(other_letter("Hello World!"))

我认为如果任何索引的模等于 0 那么它应该每隔一个字母提取并将其添加到 other_letter 中?我找到了另一种方法来解决这个问题,没有模运算符,但我想知道为什么模运算符在这里不起作用?

最佳答案

您面临的问题是,在您的代码中,您正在检查单词中字母的索引。这意味着它会找到字母的第一个 实例,而不是当前 实例。

"l" 总是索引 2"o" 总是索引 4,所以所有的 l 和 o将出现在您的结果字符串中,而不仅仅是第一个 "l" 和第一个 "o"

要在跟踪索引的同时迭代 Iterable,您可以使用 enumerate 生成索引、值对的 Iterable。但在这种情况下,它仍然不是最简洁的解决方案。

一个更简单的解决方案是对括号运算符使用 skip 参数。

在包含字符串的序列上使用[]时,第一个参数是开始索引,第二个是结束索引(最后一个元素之后的一个),第三个是跳过量.

如果您省略了开始和结束索引,您只需遍历整个字符串,您仍然可以应用 skip 参数来跳过一定数量的字母。

def other_letter(word: str):
    """Return a string of every other letter in word."""
    return word[::2]

例子:

>>> word = "Hello World!"
>>> print(word[::2])
'HloWrd'

如果想从第二个字母开始,可以将起始索引设为1而不是默认的0:

>>> print(word[1::2])
'el ol!'

关于python - 这个用于其他字母函数的 Python 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74935966/

相关文章:

java - 为什么 ruby​​ modulo 与 java/other lang 不同?

c++ - C++ 中模运算符的问题

javascript - 从回调获取代码或在 Javascript (Node.js) 中存储回调

javascript - 测验完成后将分数重置为 0

python - 如何为 QGraphicsItem 中有孔的形状获取鼠标悬停事件?

Python RegEx - 单行与多行测试

function - Elixir 中的命名函数和匿名函数有什么区别?

c++ - 是否有一个表达式使用模来进行反向环绕 ("reverse overflow")?

python - Swig C 到 Python ImportError : undefined symbol

python - 在python中将整数列表的子集相乘