如何在Python中将隐藏对象“转换”为字符串?

2024-05-14 07:04:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图输出一个字符串的旋转版本。我取了一个字符串z="string",并用它创建了一个deque,y=collections.deque(z) (deque(['S','t','r','i','n','g']),然后使用rotate方法旋转它。如何将旋转的deque对象“转换”回字符串?


Tags: 对象方法字符串版本stringcollectionsrotatedeque
3条回答

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

''.join(y)

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

但是,建议您也可以将字符串本身的切片连接起来,以形成新字符串,而不是deque和rotate和join:

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

两种方法都有效:

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

除了更容易阅读(IMHO)之外,它的速度也快得多:

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.

只需使用str.^{}方法:

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

相关问题 更多 >

    热门问题