【问题标题】:How to "convert" a dequed object to string in Python?如何在 Python 中将 dequed 对象“转换”为字符串?
【发布时间】:2013-07-26 00:06:45
【问题描述】:

我正在尝试输出字符串的旋转版本。我取了一个字符串z="string",并从中创建了一个双端队列y=collections.deque(z) (deque(['S','t','r','i','n','g']),并使用旋转方法对其进行了旋转。如何将我旋转回的双端队列对象“转换”回字符串?

【问题讨论】:

    标签: python collections rotation deque


    【解决方案1】:

    你可以使用string join method:

    ''.join(y)
    

    In [44]: import collections
    In [45]: z = "string"
    In [46]: y = collections.deque(z)
    In [47]: ''.join(y) 
    Out[47]: 'string'
    

    【讨论】:

      【解决方案2】:

      只需连接字符串中的字符:

      ''.join(y)
      

      【讨论】:

        【解决方案3】:

        只需使用str.join() 方法:

        >>> y.rotate(3)
        >>> y
        deque(['i', 'n', 'g', 's', 't', 'r'])
        >>> 
        >>> ''.join(y)
        'ingstr'
        

        【讨论】:

          【解决方案4】:

          使用''.join(y) 应该可以解决问题。

          【讨论】:

            【解决方案5】:

            一个好的方法是在字符串上使用join 方法。

            ''.join(y)
            

            【讨论】:

              【解决方案6】:

              你可以使用join():

              ''.join(y)
              

              【讨论】:

                【解决方案7】:

                回答您的问题:由于双端队列是sequence,您通常可以使用str.join 从该集合的有序元素中形成一个字符串。 str.join 在任何 Python iterable 上更广泛地工作,以将元素一个接一个地连接在一起形成一个字符串。

                但是,建议,而不是双端队列和旋转和连接,您还可以在字符串本身上连接切片以形成一个新字符串:

                >>> z="string"
                >>> rot=3
                >>> z[rot:]+z[:rot]
                'ingstr'
                

                这两种方式都适用:

                >>> rz=z[rot:]+z[:rot]
                >>> rz
                'ingstr'
                >>> rz[-rot:]+rz[:-rot]
                'string'
                

                除了更容易阅读(恕我直言)它还快了很多:

                from __future__ import print_function  #same code for Py2 Py3
                import timeit
                import collections
                
                z='string'*10
                def f1(tgt,rot=3):
                    return tgt[rot:]+tgt[:rot]
                
                def f2(tgt,rot=3):
                    y=collections.deque(tgt)
                    y.rotate(rot)
                    return ''.join(y)
                
                print(f1(z)==f2(z))    # Make sure they produce the same result
                t1=timeit.timeit("f1(z)", setup="from __main__ import f1,z")
                t2=timeit.timeit("f2(z)", setup="from __main__ import f2,z")    
                print('f1: {:.2f} secs\nf2: {:.2f} secs\n faster is {:.2f}% faster.\n'.format(
                           t1,t2,(max(t1,t2)/min(t1,t2)-1)*100.0)) 
                

                打印:

                True
                f1: 0.32 secs
                f2: 5.02 secs
                 faster is 1474.49% faster.
                

                【讨论】:

                • 哇。棒极了!谢谢!
                • @StephenPaul:谢谢。如果这有帮助,请随时accept the answer
                • 这里使用 slice 更快,因为创建双端队列使用了太多时间。
                猜你喜欢
                • 2013-10-24
                • 1970-01-01
                • 2023-01-13
                • 2021-10-05
                • 2019-12-26
                • 1970-01-01
                • 1970-01-01
                • 2021-08-03
                • 2023-04-01
                相关资源
                最近更新 更多