我想用 python 编写一个代码,当你将一个 N 位整数拆分成 M 个片段时,它列出了所有可能的排列,例如:-235654 是一个 6 位数字。这里n=6。让 m=6,那么唯一可能的排列是 2,3,5,6,5,4。如果 m=3,那么将有 10 种可能的排列,如 2,3,5654 23,56,54 235,6,54....等。通过添加在数字之间放置两个逗号的所有可能方式,您可以轻松计算此类排列的总数。在这种情况下,它是 5!/2!3!。但是编写代码来列出所有排列似乎非常困难。当我们尝试将 5 位数字(如 12345)分成 3 个部分时,例如:-1,2,345 和 12,34,5,有人可以编写程序或算法来列出所有可能的排列。现在我只能使用以下代码将数字分成 2 部分。
c=[1,2,3,4,5]
l=len(c)
i1=0
a=[]
b=[]
while i1<l-1:
i2=0
while i2<=i1:
a.append(c[i2])
i2=i2+1
i1=i1+1
while i2<l:
b.append(c[i2])
i2=i2+1
print(f"{a} {b}")
a=[]
b=[]
答案 0 :(得分:0)
您可以使用 itertools.combinations
来查找所有可以拆分字符串的可能索引:
from itertools import combinations
def all_splits(s, num):
perms = [[0] + list(i) + [len(s)] for i in list(combinations(range(1, len(s)), num - 1))]
return [[s[indices[i]: indices[i + 1]] for i in range(len(indices) - 1)] for indices in perms]
print(all_splits("abcdef", 6))
# Output: [['a', 'b', 'c', 'd', 'e', 'f']]
print(all_splits("abcdef", 3))
# Output: [['a', 'b', 'cdef'], ['a', 'bc', 'def'], ['a', 'bcd', 'ef'], ['a', 'bcde', 'f'], ['ab', 'c', 'def'],
# ['ab', 'cd', 'ef'], ['ab', 'cde', 'f'], ['abc', 'd', 'ef'], ['abc', 'de', 'f'], ['abcd', 'e', 'f']]
print(all_splits("abcdef", 1))
# Output: [['abcdef']]