Python - 循环遍历字符串

5
我正在尝试创建一个循环遍历字符串的程序,这是我迄今为止完成的部分。
def main():
        name = "firstname lastname"

        for i in name:
            print(name)
            name = name[1::]
main()

这只是给我


firstname lastname
irstname lastname
rstname lastname
stname lastname
tname lastname

直到最后一个字母为止,依此类推。

这段代码基本符合我的需求,但不完全符合。

我希望这个程序能够打印出类似于这样的内容。

firstname lastname
irstname lastname f
rstname lastname fi
stname lastname fir
tname lastname firs
name lastname first
ame lastname firstn 
me lastname firstna

循环遍历字符串等操作,但我还是无法理解。请帮忙解答。
提前感谢。

name = name[1::] + " %s"%name[0] - Joran Beasley
6个回答

3

使用双端队列如何呢?它们有专门的旋转方法来处理这种情况:

from collections import deque
s = "firstname lastname"
d = deque(s)
for _ in s:
    print(''.join(d))
    d.rotate()

如果您想要向另一个方向旋转,请使用.rotate(-1)

2
from itertools import cycle
import time
name = "test string"
my_cool_cycle = [cycle(name[i:]+name[:i]) for i in range(len(name))]
while True:
     print "".join(map(next,my_cool_cycle))
     time.sleep(1)

仅供娱乐:P


1
def main():
    name = "firstname lastname"

    for i in range(len(name)):
        print(name[i:] + name[:i])
main()

切片是一件很棒的事情。 :)


太好了!哇,我简直不敢相信我没有想到这个。谢谢你,一开始我尝试过这个方法,但是在循环范围中没有加上len(name)。谢谢! - user1919840

0
>>> for i in range(len(name)):
...     print(name[i:] + " " + name[:i])
...
firstname lastname
irstname lastname f
rstname lastname fi
stname lastname fir
tname lastname firs
name lastname first
ame lastname firstn
me lastname firstna
e lastname firstnam
 lastname firstname
lastname firstname
astname firstname l
stname firstname la
tname firstname las
name firstname last
ame firstname lastn
me firstname lastna
e firstname lastnam

0

这似乎有效。您的数组切片没有旋转字符串,您必须将第一个字符添加回字符串中,否则每次循环迭代时它都会变短。

这里有一篇帖子解释了数组切片符号: 解释Python的切片符号

def main():
    name = "firstname lastname "

    for i in name:
        print(name)
        #name = name[1::]
        name = name[1:] + name[0]
main()

0

这里有一个巧妙的一行代码也可以实现它(其中x是您想要处理的字符串):

"\n".join([x[i:]+x[:i] for i in range(len(x))])

分解:

  • "\n".join( ... ) - 将数组中的元素用\n连接起来
  • [ ... for i in ... ] - 列表推导式,通过迭代其他内容来生成列表
  • x[i:]+x[:i] - 取出从i到末尾的元素,并将从开头到i的元素放入新列表中
  • range(len(x)) - 生成一个整数可迭代对象,范围从0x的长度。

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