【问题标题】:ABC ----> ABC, CAB, BCA only order matters but not truly a itertools permutation [duplicate]ABC ----> ABC,CAB,BCA 仅顺序很重要,但不是真正的 itertools 排列 [重复]
【发布时间】:2018-11-04 21:04:26
【问题描述】:

我正在尝试编写一个简单的 Python 脚本,该脚本具有以下功能:

用户输入一串字母,代码按以下方式返回组合:

ABC ----> ABC, CAB, BCA. 

在这种情况下,“邻居”保持不变,但最后一个字母被移到开头。我一直在尝试itertools,但combinationspermutations 并不是我想要的。任何帮助将不胜感激!

【问题讨论】:

  • s = s[-1]+s[:-1] ?

标签: python itertools


【解决方案1】:

您正在寻找旋转,而不是排列。

collections.deque 可以做到。

>>> d = deque('ABC')
>>> ''.join(d)
>>> 'ABC'
>>> d.rotate(1)
>>> ''.join(d)
>>> 'CAB'
>>> d.rotate(1)
>>> ''.join(d)
>>> 'BCA'

如果您想将所有旋转存储在一个列表中,您可以这样做

>>> d = deque('ABC')
>>> result = [''.join(d)]
>>> for _ in range(len(d) - 1):
...:    d.rotate(1)
...:    result.append(''.join(d))
...:    
>>> result
>>> ['ABC', 'CAB', 'BCA']

您应该能够自己处理用户输入的内容。

【讨论】:

【解决方案2】:

我不认为它有直接的功能,但生成一个单线器相当简单

x='abcde'
result = [x[-i:]+x[:-i] for i in range(len(x))]
# result will be ['abcde', 'eabcd', 'deabc', 'cdeab', 'bcdea']

【讨论】:

  • 非常感谢!完美运行。
  • 这对于这个问题中的常规字符串很有效。我有一个新问题是字符串现在用“,”分隔,我想在其中拆分它们。我想做的是:A,B,C ---------> 'A,B,C' 'C,A,B' 'B,C,A'
  • oneliner 适用于任何可迭代对象,因此最简单的方法是使用所需的分隔符分割字符串。 x='a,b,c,d,e'.split(',')
猜你喜欢
  • 2016-01-20
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多