如何在Python中将一个deque对象“转换”成字符串?

9

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

7个回答

8

回答你的问题:由于双端队列是一个序列,因此通常可以使用str.join将该集合的有序元素组成字符串。str.join更广泛地适用于任何Python可迭代对象,以便逐个连接元素形成字符串。

但是,建议您不要使用deque、rotate和join,而是可以在字符串本身上连接切片以形成新的字符串:

>>> 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.

使用切片更快,因为创建双端队列需要太多时间。 - Windsooon

6

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

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

3

只需将字符串中的字符连接起来:

''.join(y)

3
你可以使用join()方法:
''.join(y)

2
您可以使用字符串连接方法
''.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)应该可以解决问题。

1
一个好的方法是在字符串上使用join方法。
''.join(y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接