三行代码  ›  专栏  ›  技术社区  ›  Yakob

程序旋转数字列表,直到所有数字都移回起始位置

  •  0
  • Yakob  · 技术社区  · 1 月前

    我正试图编写一个程序,在给定一个列表的情况下,程序读取列表,并将列表中的数字在每次交互中旋转一个位置,直到数字到达起始位置。

    所需输出的示例:

    list : 1 2 3 4
    [1,2,3,4]
    [2,3,4,1]
    [3,4,1,2]
    [4,1,2,3]
    [1,2,3,4]
    

    我已经编写了代码来实现这一点,但它效率不高,并且没有按照我的要求打印出来。

    def rotation(n):
      rotations = set()
      for i in range( len( str(n) ) ):
        m = int( str(n)[i:] + str(n)[:i] )
        rotations.add(m)
      return rotations
    
    print(rotation(1234))
    

    这段代码的输出是

    {1234, 4123, 3412, 2341}
    

    如果有人能帮我解决这个问题,我将不胜感激。

    2 回复  |  直到 1 月前
        1
  •  2
  •   Samwise    1 月前

    不清楚你为什么要用这个号码 1234 当你想在名单上做手术的时候 [1, 2, 3, 4] ,或者在希望输出包含重复元素时函数返回集合的原因。这一切只会让问题变得更复杂。

    只需使用函数获取原始列表并打印每个旋转:

    >>> def rotation(nums):
    ...     for i in range(len(nums)+1):
    ...         print(nums[i:] + nums[:i])
    ...
    >>> rotation([1, 2, 3, 4])
    [1, 2, 3, 4]
    [2, 3, 4, 1]
    [3, 4, 1, 2]
    [4, 1, 2, 3]
    [1, 2, 3, 4]
    
        2
  •  1
  •   Zero    1 月前

    这样做,

    def rotation(series):
      for i in range(len(series) + 1):
        print(series)
        series = series[1:] + series[:1]
    
    rotation([1,2,3,4])
    
    [1, 2, 3, 4]
    [2, 3, 4, 1]
    [3, 4, 1, 2]
    [4, 1, 2, 3]
    [1, 2, 3, 4]