【问题标题】:Reversing "group" of strings in Python在 Python 中反转字符串的“组”
【发布时间】:2013-07-31 19:22:59
【问题描述】:

如何反转字符串的“组”(不是列表)? 例如,鉴于“组”大小等于 3,我想将“123456789”转换为“321654987”。

以下是我的代码,但结果是打印空字符串:

string = "12345678901234567890"
new_string = ""
for i in range(0, len(string), 5):
    new_string = new_string + string[i:i+5:-1]
print (new_string)

感谢您的任何意见和建议。

【问题讨论】:

    标签: python string reverse


    【解决方案1】:

    当使用负步长时,也要交换起始值和结束值:

    new_string += string[i + 4:i - 1 if i else None:-1]
    

    请注意,结束值被排除在外,None 应该用于包含 first 字符(-1 将再次从末尾切开,因此string[4:-1:-1] 将为空)。

    演示:

    >>> string = "12345678901234567890"
    >>> new_string = ""
    >>> for i in range(0, len(string), 5):
    ...     new_string = new_string + string[i + 4:i - 1 if i else None:-1]
    ... 
    >>> new_string
    '54321098765432109876'
    

    但是,先切片,然后反转可能会更容易,并且省去了此类切片的麻烦:

    new_string += string[i:i + 4][::-1]
    

    【讨论】:

      【解决方案2】:

      解决您的问题的一个简单的单行程序会像这样。

      >>> from itertools import chain
      >>> testString = "123456789"
      >>> group = 3
      >>> "".join(chain.from_iterable([reversed(elem) for elem in zip(*[iter(testString)]*group)]))
      '321654987'
      

      另一个例子 ->

      >>> testString = "12345678901234567890"
      >>> group = 5
      >>> "".join(chain.from_iterable([reversed(elem) for elem in zip(*[iter(testString)]*group)]))
      '54321098765432109876'
      

      【讨论】:

      • 似乎除非你知道你只想要一个特定的长度,否则 itertools 方法是最好的。
      • 为什么?其中许多解决方案都可以将长度作为参数传递。
      【解决方案3】:

      这可以在一行中完成:

      newline = ''.join([string[i:i+n:1][::-1] for i in range(0, len(string), n)])

      其中 n 是“组”的大小。在您的情况下,它将是 3。解释如下:

      i in range(0, len(string), n)负责按三计数

      string[i+i+n:1]负责获取每个chunk

      [::-1] 将反转每个块

      ''.join() 将每个现在反转的块连接回单个字符串。

      另一种选择是:

      ''.join([string[i+n-1:i-1 if i else None:-1] for i in range(0, len(string), n)])

      选择和反转是一步完成的。

      【讨论】:

        猜你喜欢
        • 2010-10-30
        • 2019-05-02
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多