Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";转换;Python中要字符串的dequed对象?_Python_Collections_Rotation_Deque - Fatal编程技术网

如何";转换;Python中要字符串的dequed对象?

如何";转换;Python中要字符串的dequed对象?,python,collections,rotation,deque,Python,Collections,Rotation,Deque,我试图输出字符串的旋转版本。我取了一个字符串,z=“string”,并用它创建了一个deque,y=collections.deque(z)(deque(['S','t','r','I','n','g')),然后使用旋转方法旋转它。我如何将旋转的deque对象“转换”回字符串?您可以使用: 只需连接字符串中的字符: ''.join(y) 仅使用方法: 使用“”。join(y)应该可以做到这一点。一个好方法是对字符串使用join方法 ''.join(y) 您可以使用join(): 回答您的问

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

您可以使用:



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

''.join(y)
仅使用方法:


使用
“”。join(y)
应该可以做到这一点。

一个好方法是对字符串使用
join
方法

''.join(y)
您可以使用
join()


回答您的问题:因为deque是一个,所以您通常可以使用从该集合的有序元素中形成字符串。
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'
除了更容易阅读(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.

哇。太棒了!谢谢!@StephenPaul:谢谢。如果这有帮助,请随意使用slice,因为创建deque会占用太多时间。
>>> 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.