【问题标题】:Python string iterationsPython 字符串迭代
【发布时间】:2013-08-14 11:03:57
【问题描述】:

将字符串循环到网格中可能的逻辑是什么?

例如,如果我想打印“水”

water
aterw
terwa
erwat
rwate

我正在尝试类似的东西,

word = 'water'
for number, letter in enumerate(word):
    if number < len(word):
        print a + word[1:] + word[:1]

正如您从我的尝试中看到的那样,我不理解如何实现这一目标。 感谢您的帮助。

【问题讨论】:

    标签: python string loops


    【解决方案1】:
    In [2]: word = 'water'
       ...: for i in range(len(word)):
       ...:     print(word[i:] + word[:i])
    water
    aterw
    terwa
    erwat
    rwate
    

    i 循环遍历所有可能的索引,获取从该索引开始的后缀并将其添加到字符串的前面,从而获得所有可能的旋转。

    【讨论】:

      【解决方案2】:

      你可以的

      word = 'water'
      for i in xrange(len(word)):
         print word[i:] + word[:i]
      

      【讨论】:

        【解决方案3】:

        使用collections.deque,它有一个rotate 方法可以完成你的工作。

        向右旋转双端队列n 步骤。如果n 为负数,则旋转到 左边。向右旋转一步相当于: d.appendleft(d.pop())

        演示:

        from collections import deque
        d = deque('water')
        for _ in xrange(len(d)):
            print ''.join(d)
            d.rotate(-1)
        

        输出:

        water
        aterw
        terwa
        erwat
        rwate
        

        【讨论】:

        • 不知道你能做到这一点! +1 发现deque :-)
        • 这对于试图进行切片的 OP 来说有点重量级。 +/- 0,因为我不确定答案是否应该针对问题的级别。
        • +1 提高效率!要匹配 OP 预期输出,您应该交换 rotateprint 行并将 -1 用作“步骤”。 -0 表示答案的复杂性(OP 似乎对 python 和编程来说是全新的......)
        • @Bakuriu 修复了输出。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-29
        • 2019-07-15
        • 2014-04-21
        • 2015-11-28
        • 2020-06-20
        • 2020-07-23
        • 2014-09-23
        相关资源
        最近更新 更多