【问题标题】:Reversing a string in Python using a loop? [duplicate]使用循环在Python中反转字符串? [复制]
【发布时间】:2017-05-10 09:23:34
【问题描述】:

我被困在一个练习中,我需要在一个函数中反转一个随机字符串,只使用一个循环(for 循环还是 while?)。

我不能在这里使用".join(reversed(string))string[::-1] 方法,所以有点棘手。

我的代码如下所示:

def reverse(text):
    while len(text) > 0:
        print text[(len(text)) - 1],
        del(text[(len(text)) - 1]

我使用, 在同一行打印出文本中的每个字母!

del(text[(len(text)) - 1] 的语法无效

有什么建议吗?

【问题讨论】:

  • 您是要反转字符串还是以相反的顺序打印字符?您的标题暗示前者,但您的代码似乎正在尝试执行后者。如果你想反转字符串 - 建立它然后 return 反转的字符串。如果需要,让调用代码打印它。大多数函数中不应包含print
  • 您可以使用临时变量来构建反向字符串,而不是操作原始字符串
  • del 修改对象,但不能修改字符串,必须创建一个新字符串。尝试创建一个少一个字符的新字符串:text = text[:-1]
  • @Duncan 是真的——但毫无意义。 OP 没有充分的理由在构建反向的过程中尝试使字符串更小。
  • @Duncan 我不会说用于反转字符串的二次算法完全有效,尽管它当然是有效的。在每个阶段创建字符串的副本是昂贵的。

标签: python string function loops reverse


【解决方案1】:

这是我使用装饰器和 for 循环的尝试。将所有内容放在一个文件中。

实现细节:

def reverse(func):
    def reverse_engine(items):
        partial_items = []
        for item in items:
            partial_items = [item] + partial_items
        return func(partial_items)
    return reverse_engine

用法:

示例 1:

@reverse
def echo_alphabets(word):
    return ''.join(word)

echo_alphabets('hello')
# olleh

示例 2:

@reverse
def echo_words(words):
    return words

echo_words([':)', '3.6.0', 'Python', 'Hello'])
# ['Hello', 'Python', '3.6.0', ':)']

示例 3:

@reverse
def reverse_and_square(numbers):
    return list(
        map(lambda number: number ** 2, numbers)
    )

reverse_and_square(range(1, 6))
# [25, 16, 9, 4, 1]

【讨论】:

    【解决方案2】:

    Python 字符串是不可变的。你不能在字符串上使用 del。

    text = 'abcde'
    length = len(text)
    text_rev = ""
    while length>0:
       text_rev += text[length-1]
       length = length-1
    
    print text_rev
    

    希望这会有所帮助。

    【讨论】:

    • 是的,很酷,你也可以使用while循环,
    • 这似乎比使用 for 循环更容易
    • @Daniel Bäck 如果您喜欢我的解决方案,您可以投票。这有助于像您一样正在寻找相同答案的人。
    【解决方案3】:

    问题是你不能在 python 中的字符串上使用del。 然而,这段代码在没有 del 的情况下也能工作,并且有望解决问题:

    def reverse(text):
        a = ""
        for i in range(1, len(text) + 1):
            a += text[len(text) - i]
        return a
    
    print(reverse("Hello World!")) # prints: !dlroW olleH
    

    【讨论】:

    • 好的,我明白,但我不明白 len(text) + 1
    • 为什么要使用 + 1 for i 来遍历?
    • @DanielBäck 之所以存在,是因为 python 缺少反转单词的最后一个字母。为了解决这个问题,我只添加了一个,以便它再次循环并添加最后一个字母。
    • 好的,谢谢,这解决了我的问题!
    • 嗨@DanielBäck 如果这个或任何答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您找到了解决方案,并为回答者和您自己赢得了一些声誉。
    【解决方案4】:

    Python 字符串是不可变的,所以不能使用del 语句就地删除字符。但是,您可以在遍历原始字符串时构建一个新字符串:

    def reverse(text):
        rev_text = ""
        for char in text:
            rev_text = char + rev_text
        return rev_text
    
    reverse("hello")
    # 'olleh'
    

    【讨论】:

    • 我不太确定一个完整的答案是否对 OP 有多大好处。
    • @JacobVlijm s[::-1] 是唯一有利于不做家庭作业的人的答案。无论如何——这肯定是重复的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2018-04-08
    • 2017-04-13
    • 2021-12-04
    相关资源
    最近更新 更多