【问题标题】:Python - Cycing through a stringPython - 通过字符串循环
【发布时间】:2013-11-23 23:24:14
【问题描述】:

我正在尝试创建一个循环遍历字符串的程序,这就是我目前所拥有的。

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]

标签: python python-2.7 python-3.x computer-science


【解决方案1】:
def main():
    name = "firstname lastname"

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

切片是一件美妙的事情。 :)

【讨论】:

  • 完美!哇,我不敢相信我没想到这一点。谢谢,起初我尝试了这个确切的东西,但没有在循环范围内使用 len(name)。谢谢!
【解决方案2】:
>>> 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

【讨论】:

    【解决方案3】:

    使用double ended queue 怎么样。他们有专门的旋转方法来处理这种事情:

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

    如果你想旋转另一个方向,你可以使用.rotate(-1)

    【讨论】:

      【解决方案4】:

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

      这是解释数组切片表示法的帖子: Explain Python's slice notation

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

      【讨论】:

        【解决方案5】:

        这也是一个漂亮的小班轮(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)) - 生成从 0 到长度为 x 的整数的可迭代。

        【讨论】:

          【解决方案6】:
          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

          【讨论】:

            猜你喜欢
            • 2017-03-21
            • 1970-01-01
            • 1970-01-01
            • 2011-07-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-13
            相关资源
            最近更新 更多