2024-05-14 07:04:38 发布
网友
我试图输出一个字符串的旋转版本。我取了一个字符串z="string",并用它创建了一个deque,y=collections.deque(z) (deque(['S','t','r','i','n','g']),然后使用rotate方法旋转它。如何将旋转的deque对象“转换”回字符串?
z="string"
y=collections.deque(z) (deque(['S','t','r','i','n','g'])
只需连接字符串中的字符:
''.join(y)
回答您的问题:由于deque是一个sequence,您通常可以使用str.join从该集合的有序元素中形成一个字符串。str.join在任何Pythoniterable上都可以更广泛地工作,以便从逐个连接在一起的元素中形成一个字符串。
str.join
但是,建议您也可以将字符串本身的切片连接起来,以形成新字符串,而不是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'
只需连接字符串中的字符:
回答您的问题:由于deque是一个sequence,您通常可以使用str.join从该集合的有序元素中形成一个字符串。
str.join
在任何Pythoniterable上都可以更广泛地工作,以便从逐个连接在一起的元素中形成一个字符串。但是,建议您也可以将字符串本身的切片连接起来,以形成新字符串,而不是deque和rotate和join:
两种方法都有效:
除了更容易阅读(IMHO)之外,它的速度也快得多:
印刷品:
只需使用str.^{} 方法:
相关问题 更多 >
编程相关推荐