<p>我对@Hooked的回答有异议。。。在</p>
<p>首先,对于py来说,我是一个完全的新手,但是我正在寻找类似上面代码的东西。我现在在<a href="https://repl.it/repls" rel="nofollow noreferrer">Repl.it</a>输入</p>
<p>我的第一个问题是争论</p>
<pre><code>for x in permutations([1,2,3],2):
print x
</code></pre>
<p>返回以下错误</p>
^{pr2}$
<p>我是这样修好的</p>
<pre><code>for x in permutations([1,2,3],2):
print (x)
</code></pre>
<p>但现在得到了一个错误:</p>
<pre><code>line 25, in <module>
for x in permutations([1,2,3],2):
File "main.py", line 14, in permutations
cycles[i] -= 1
TypeError: 'range' object does not support item assignment
</code></pre>
<p>现在,我不知道去哪里调试代码。但是,我看到很多人指出<a href="https://docs.python.org/3/library/itertools.html#itertools.permutations" rel="nofollow noreferrer">itertools</a>在文档中包含代码。我复制了它,它起作用了。代码如下:</p>
<pre><code>def permutations(iterable, r=None):
# permutations('ABCD', 2) > AB AC AD BA BC BD CA CB CD DA DB DC
# permutations(range(3)) > 012 021 102 120 201 210
pool = tuple(iterable)
n = len(pool)
r = n if r is None else r
if r > n:
return
indices = list(range(n))
cycles = list(range(n, n-r, -1))
yield tuple(pool[i] for i in indices[:r])
while n:
for i in reversed(range(r)):
cycles[i] -= 1
if cycles[i] == 0:
indices[i:] = indices[i+1:] + indices[i:i+1]
cycles[i] = n - i
else:
j = cycles[i]
indices[i], indices[-j] = indices[-j], indices[i]
yield tuple(pool[i] for i in indices[:r])
break
else:
return
</code></pre>